用于处理动态分类法的专用多面搜索引擎 - 仅有助于性能还是灵活性?

2024-01-01

一段时间以来,我一直在考虑如何使用类似于 eBay 的分类法和依赖于特定产品类别的属性来对典型的电子商务网站进行建模。

第一次尝试是在 EAV 和 Table Per Class 数据库继承建模之间进行选择。我选择后者是因为性能,但这意味着为每个特定(类别树中的叶子)产品类别创建专用表,并将特定类别属性(例如电视的分辨率)建模为单独的列。

虽然性能良好,但如果您需要向现有类别添加属性或添加新类别,则此设置并不灵活。对于每个此类更改都需要以下内容:

  • 更改/创建表
  • 用于按特定属性过滤此类类别的新表单
  • 用于生成用于搜索和过滤的数据库查询的新代码
  • 一些新的视图模型/DTO 和用于展示新类别产品的视图

为了应对这种复杂性,我认为需要在 xml 甚至 excel 文件中对这些属性进行某种元表示(甚至在应用程序之外),以便在每次更改时都可以自动生成所有提到的代码(sql/orm 查询、应用程序代码、模板)。因此它可以帮助开发,但仍然需要测试和额外的部署。

那时我了解到 eBay 并没有真正使用关系数据库进行搜索,而且他们的分类非常灵活,他们可以很快添加新的叶类别。此外,它们的类别可能不是来自关系数据库中建模的分层树的类别,而只是搜索属性(方面)。

在快速浏览了最有前途的专用分面搜索设置(单独的 Solr 实例)后,我不确定它是否可以帮助我灵活地应对分类法更改,因为通常 Solr 只是以某种方式镜像关系数据库,因此特定类别属性仍然必须在数据库中建模为 DBMS 元数据,因此例如。动态生成用于过滤属性的 UI 表单将很困难,除非:

1)我将使用EAV fasion将数据保存在RDBMS中,并使用SOLR搜索克服其性能问题(但仍然存在EAV混乱、没有数据完整性强制等问题)

2)我将只在 RDBMS 中保留属性字典(即仅保留它们的名称和类型),并将特定属性值存储在 SOLR 中,将其用作除搜索工具之外的非关系数据存储。我也不相信这个解决方案(即使可能),因为应用程序将与 solr 紧密耦合(即产品版本管理 CRUD 将直接与 SOLR 交互)。

你怎么看?您认为对于任何类型的此类(高性能)分类法灵活性,代码生成都是不可避免的吗?你会怎么处理?也许数据库中 EAV 风格的一些单独的数据字典只是用于代码生成目的?我想我也可以使用 MongoDB 之类的东西,但 UI 代码生成(运行时或非运行时)仍然需要某种元数据。

这里有很多问题,但我不想将其分解为更小的问题,因为我对处理更大类此类问题时的通用设计方法感兴趣。


我并不声称对所有这些都有明确的答案(这是一个相当开放式的问题,您应该尝试将其分解为更小的部分,这取决于您的实际要求,事实上,我很想投票关闭它)但我会评论一些事情:

  1. 我会忘记在 RDBMS 上对此进行建模。分面搜索在关系模式中不起作用 http://www.kimbly.com/blog/000239.html.
  2. IMO 这不是代码生成的正确位置。您应该设计您的代码,使其不会随着数据更改而更改(我不是在谈论schema变化)。
  3. 在 Excel 电子表格上存储元数据/属性似乎是一个非常糟糕的主意。我将构建一个 UI 来编辑它,它将存储在 Solr / MongoDB / CouchDB / 您选择管理它的任何内容上。
  4. Solr does not“只是镜像关系数据库”。事实上,Solr 完全独立于关系数据库。最常见的情况之一is将数据从 RDBMS 转储到 Solr(在此过程中对数据进行非规范化),但 Solr 足够灵活,可以在没有任何关系数据源的情况下工作。
  5. Solr 中的分层分面 http://wiki.apache.org/solr/HierarchicalFaceting仍然是研究中的一个悬而未决的问题。目前正在研究两种不同的方法(SOLR-64 http://issues.apache.org/jira/browse/SOLR-64, SOLR-792 http://issues.apache.org/jira/browse/SOLR-792)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于处理动态分类法的专用多面搜索引擎 - 仅有助于性能还是灵活性? 的相关文章

  • lucene 如何与 Neo4j 配合使用

    我是新来的Neo4j and Solr Lucene 我读到我们可以在 Neo4j 中使用 lucene 查询 这是如何工作的 Neo4j中使用lucene查询有什么用 我还需要一个建议 我需要编写一个应用程序来搜索和分析数据 which
  • 如何处理长期运行系统中旧的、过时的数据库数据?

    程序员有哪些可能性来处理很少使用但不能简单删除的数据 因为至少报告仍然需要它 我想到的一些例子 大学老年时期停止的资助类型 未使用的货币 例如意大利里拉 消失国家的名称 例如奥匈帝国 苏联 一些部分解决方案是活动标志 活动周期 可视化优先级
  • 多人/单人测验游戏的数据库设计

    我在这里看到了很多问题 但没有人适合我的问题 我正在尝试创建一个可扩展的 ER 模型 如果我想添加更多数据 则不会破坏几乎任何东西 所以我尝试创建的是 有两种类型的用户 比如说管理员和工作人员 他们有不同的角色 管理员可以对问题进行 CRU
  • 数据库设计 - “推”模型,或写时扇出

    背景信息 我正在尝试检索我关注的人的图像 按最新时间排序 它就像 Twitter 新闻源 显示您朋友的最新动态 Plans 目前我只需要考虑一项 那就是图像 将来我计划分析用户的行为并将他们可能喜欢的其他图像添加到他们的提要中等 http
  • 如何知道 Solr Optimize 何时完成?

    我正在使用 Solr php client 通过 php 与 Solr 进行通信 这段代码触发solr优化命令 solr gt optimize 请问有没有什么方法可以确定优化完成了 这都是因为我的网站上有一个管理页面 我每天必须手动优化
  • Join 表(关联表)有主键吗?多对多关系

    Join 表 关联表 有主键吗 多对多的关系 我见过一些带有主键的连接表 一些没有 有人可以解释一下连接表中何时会有主键吗 为什么 先感谢您 在纯 联接 或联结表中 所有字段都将成为主键的一部分 例如 让我们考虑下表 CREATE TABL
  • “多对二”关系

    我想知道 多对二 关系 孩子可以与两个父母中的任何一个有联系 但不能与两个父母都有联系 有什么办法可以加强这一点吗 另外我想防止孩子重复输入 现实世界的例子是电话号码 用户和公司 一个公司可以有很多电话号码 一个用户可以有很多电话号码 但理
  • 如何过滤 Cassandra 中的数据?

    我在应用程序中使用 mySQL 一段时间了 收集的数据越多 速度就越慢 所以我一直在研究 NOSQL 选项 我在 mySQL 中拥有的东西之一是从一堆连接创建的视图 该应用程序在网格中显示所有重要信息 用户可以在此数据集上选择范围 进行搜索
  • MongoDb聚合

    如何使用 mongoDb 聚合编写模拟查询 select count as ccount from a group by a someField order by ccount desc limit 1 使用 mongoDb 中的 grou
  • Django-Haystack 和 Solr 8.5.1

    Django haystack 是否适用于最新的 Solr 更新 8 5 1 另外我如何设置我的 Django 博客项目 CentOS 8 Solr 8 7 Django Oscar 3 0 1 安装Java yum update yum
  • 如何将商品与定价数据正确关联,同时考虑价格变化历史记录

    事实上 所有 POS 系统都会在销售时将商品的价格直接记录到交易表中 因为该价格可能会在以后发生变化 但其销售价格应保持不变 我想知道如何设置保留价格变化历史记录的定价表 以便您可以根据商品及其销售时间将交易与该表关联起来 以获得正确的价格
  • 如何决定使用哪种NoSQL技术? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 MongoDB 基于文档 HBase 基于列 和 Neo4j 对象图 的优缺点是什么 我特别有兴趣了解
  • 为什么 NoSQL 比 RDBMS 更擅长“横向扩展”?

    我在a中读过以下文字技术博客 http tekedia com 12083 nosql database advantages and disadvantages 讨论NoSQL的优缺点 多年来 为了提高数据库服务器的性能 数据库管理员不得
  • 非关系数据库设计[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有兴趣了解您使用过的设计策略非关系型 nosql 数据库 也就是说 不使用传统关系设计或 SQL 的 大多数是新的 数据存储类 例如
  • 在 MySQL 数据库中存储图像文件或 URL?哪个更好? [复制]

    这个问题在这里已经有答案了 可能的重复 在数据库中存储图像 是还是否 https stackoverflow com questions 3748 storing images in db yea or nay 数据库中的图像与文件系统中的
  • 限制 sqlite 表的最大行数

    我希望实现一种 活动日志 表 其中用户执行的操作存储在 sqlite 表中 然后呈现给用户 以便他们可以看到他们所做的最新活动 然而 自然地 我觉得没有必要保留每一个历史记录 所以我想知道是否有一种方法可以配置表以在达到最大设置限制后开始修
  • 社交应用程序的数据库设计和优化注意事项

    通常的情况 我有一个简单的应用程序 允许人们上传照片并关注其他人 因此 每个用户都会有类似 墙 或 活动源 的东西 他或她可以在其中看到他 她的朋友 他或她关注的人 上传的最新照片 大多数功能都很容易实现 然而 当涉及到这个历史活动源时 由
  • 当所有维度值都具有 100% 重要性时处理多对多维度

    我至少会尽力保持简洁 假设我们正在跟踪一段时间内的账户余额 所以我们的事实表将包含诸如 账户余额情况表 FK 账户ID FK 日期ID Balance 显然你有一个账户维度表 and a 日期维度表 所以现在我们可以轻松地过滤帐户或日期 或
  • solr 不标记受保护的单词

    我在 Solr Lucene 3 x 中有一个文档 其中有一个特殊的复制字段facet headline 以便有一个用于分面的未词干字段 有时两个或以上的单词属于在一起 这应该被处理 算作一个单词 例如 kim jong il 因此标题 星
  • 是否可以为单个节点添加多个位置并且 solr 可以显示搜索的所有位置?

    场景 假设您在多个位置有一个产品 当您搜索该产品 而不是位置 时 您应该看到所有位置 在 Drupal 中 您可以使用多值字段来表示位置 但在 solr 中我不知道 当使用 solr 对产品进行索引时 您不应该仅发送一次 例如 3 次 并将

随机推荐

  • RavenDB 对列表属性进行 Map/Reduce

    刚刚学习 Map Reduce 我错过了一个步骤 我读过这篇文章 使用 NET 客户端的 RavenDB Map Reduce 示例 https stackoverflow com questions 4253334 ravendb map
  • 命名参数什么时候有用?

    C 代码中是否存在位置参数不够用的情况 我真的没有看到命名参数有任何好处 相反 我可以看到过度使用命名参数会使代码难以阅读 所以我的问题是 为什么有人会使用它们以及它如何帮助编写更好的代码 因为我确信它们不是毫无理由地实现的 这对我来说看起
  • 如何在 WSO2 APIM 中处理外部/第三方 API 的外部身份验证

    我正在使用 WSO2 APIM 2 5 0 和 IS 5 6 0 它们都是集成的并且运行良好 现在 如果我在 API 管理中加入第三方 API 并使用 oauth 令牌 我就可以访问它 但问题是如何处理具有自己的身份验证的任何外部或第三方
  • const_cast 和 UB

    5 2 11 7 注 取决于 对象的类型 写操作 通过指针 左值或指针 到由 a 产生的数据成员 const cast 抛弃 a const 限定符68 may生产 未定义的行为 7 1 5 1 本节 C 03 的措辞令我惊讶 令人惊讶的是
  • 两次时间差

    我想以 hh mm 格式显示两个时间之间的差异 第一个时间来自数据库 第二个时间是系统时间 时差每秒更新一次 我怎样才能做到这一点 目前 我正在使用两个手动时间 如果效果完美 那么我会将其实施到我的应用程序中 public class Ma
  • 将星星添加到 p 值

    我计算了多个变量均值差异的 Anova F 检验 p 值 现在我想添加 星星 来指示 p 值的显着性水平 我希望 表示 10 水平的显着性 表示 5 水平的显着性 表示 1 水平的显着性 我的数据如下所示 structure list Va
  • 如果未安装应用程序,如何获取 Facebook 应用程序链接

    如果用户点击 Facebook 应用程序中的深层链接时未安装我的应用程序 如何获取应用程序链接数据 令人惊讶的是 Facebook 关于这个问题的文档很少 我有一个深层链接https fb me 635533123230265 返回 HTM
  • 在 ASP.NET MVC 组织帐户中访问 Azure AD Graph API

    我正在尝试根据登录用户的 AD 组限制页面访问 我对以下代码有问题 var tenantId incomingPrincipal FindFirst GraphConfiguration TenantIdClaimType Value cr
  • 如何在 Eclipse 中为编辑器创建大纲视图?

    我在 eclipse 中创建了一个自定义编辑器 其大纲视图显示大纲不可用 我尝试搜索此内容 发现了以下链接 常见问题解答 如何为我自己的语言编辑器创建大纲视图 http wiki eclipse org FAQ How do I creat
  • 在 Ruby 中生成高斯(正态分布)随机数的代码

    在 ruby 中生成正态分布随机数的代码是什么 注 我回答了我自己的问题 但我会等几天再接受 看看是否有人有更好的答案 EDIT 为了搜索这个 我查看了两次搜索产生的 SO 上的所有页面 正态分布 红宝石 and 高斯 随机红宝石 蟒蛇的随
  • 使用 [NSDate date] 获取当前日期和时间

    我的系统的日期时间是 5 月 26 日 22 55 但是当我与 NSDate date 日期时间是 5 月 27 日 02 35 是因为时区的原因吗 如果是 如何解决这个问题 当我得到日期时间时 给我系统的日期并且不检查时区 NSLocal
  • yii:尝试获取非对象的属性

    嗯 我发现this https stackoverflow com questions 18335513 trying to get property of non object error in yii 但我看不到与我的错误的关系 我是新
  • Python - 从其他内部类引用内部类

    我试图从另一个内部类引用一个内部类 我都尝试过 class Foo object class A object pass class B object other A and class Foo object class A object
  • SVG - 单击不是函数[重复]

    这个问题在这里已经有答案了 我有一个这样的元素
  • AJAX更新数据库

    抱歉没有说出我的问题 实际上我想更新数据库中的数据 但现在的问题是 即使我尝试选择批准或拒绝ajax仍然不会更新 我是 ajax 新手 尝试在网络上搜索 但我的代码仍然有问题 这是我的 php 页面
  • HTML 报纸专栏

    我正在尝试使用文本块创建报纸样式的专栏 我希望文本均匀分布在两列中 这样可以对文本长度的变化做出反应 仅使用 HTML CSS 可以吗 如果不行 可以使用 javascript 吗 Thanks 两个注意事项 适用于印刷媒体的内容不适用于显
  • 数学表达式的自定义解释器

    我必须评估大量包含变量的表达式 并且我正在考虑编写一个小型自定义解释器以保持编译快速且小型 但是我对这个主题没有经验 并且有一些问题 假设我们有一个包含数学表达式和一组有限对象的文件 该文件可能如下所示 expr x y z 2 x y x
  • Flask 应用程序部署到 Heroku 时出错 at=错误代码=H10 desc="应用程序崩溃" method=GET path="/"

    在 Heroku 中部署时 示例 Flask 应用程序在 error code H10 desc App crashed method GET path 处给出错误 Flaskapp py from flask import Flask a
  • Dataframe聚合方法传递列表问题

    这可能是一个错误 但是您对此 pandas 功能有何看法 df pd DataFrame np arange 20 reshape 10 1 columns AB def f x print type x df agg f Output
  • 用于处理动态分类法的专用多面搜索引擎 - 仅有助于性能还是灵活性?

    一段时间以来 我一直在考虑如何使用类似于 eBay 的分类法和依赖于特定产品类别的属性来对典型的电子商务网站进行建模 第一次尝试是在 EAV 和 Table Per Class 数据库继承建模之间进行选择 我选择后者是因为性能 但这意味着为