solr地理层次结构

标签 solr hierarchy facet

我一直在尝试找出一种方法来在 solr 中实现带有层次结构的分面,但无法弄清楚在我的情况下该怎么做。我已经阅读了几篇关于在 solr 中进行层次结构的文章以及补丁 64 和 792 中的解决方案。我遇到的主要问题是我有可以属于层次结构的多个分支的实体。我的数据的当前形式是带有国家、州和城市 MVA 的用户文档。

以地理层次结构为例,人们可以将他们的服务列出到城市级别。一个人可以为整个阿拉巴马州提供服务,但只能为佐治亚州的某些城镇提供服务。现在,州级的分面计数计算服务于阿拉巴马州 1 和佐治亚州 1 的区域的不同个人,当向下扩展到城市级别时,每个城市都有一个计数(换句话说,城市的总和计数不一定等于状态计数,因为计数不是相互排斥的)。

US(1)
Georgia(1)
Atlanta(1)
Columbus(0)
Athens(0)
阿拉巴马州(1)
Mobile(1)
Birmingham(1)
Huntsville(1)

我被挂断的部分是,当面对城市时,我无法知道他们属于哪个州,因为用户同时在阿拉巴马州和乔治亚州列出,我无法找到关联的方法互相属性。如果 solr-64 支持同一个文档的多个分支,如 US/Alabama/Mobile/和 US/Georgia/Atlanta/,它可能会起作用。截至目前,我还不能让它与夜间构建一起编译,所以我有点卡住了。

有没有人有更好的方法来做到这一点?

最佳答案

参见描述的第一个用例 here . (需要进行索引和查询的客户端处理!)

分类导航

问题:您有一个类别树,并且您的产品被归入多个类别。

这个问题有两个相对相似的解决方案。我将描述其中之一:

  • 创建一个名为“category”的多值字符串字段。使用类别 ID(如果您想避免数据库查询,则使用名称)。
  • 你有一个类别树。确保文档不仅获得叶类别,而且获得所有类别直到根节点。
  • 现在以“-1”为限制对类别字段进行分面
  • 但是如果您只想显示一个级别的类别怎么办?例如。如果您一次不想要其他级别,或者它们太多了。

    然后索引类别字段ala <level>_category .为此,您在索引时需要 RAM 中的完整类别树。然后使用 facet.prefix=<level>_过滤级别的类别列表

  • 点击类别条目应该会产生过滤器查询 fq=category:”<level>_categoryId”
  • 现在有点棘手的部分是您的 UI 或中间层必须解析关卡,例如2 并将 2+1=3 附加到查询:facet.prefix=3_
  • 如果您过滤级别,则剩下一个问题:

    问:如何显示选中类别到根类别的路径?

    A:要么通过数据库获取类别父级,如果您将类别 ID 存储在 Solr 中,这很容易——而不是类别名称。 或者从参数列表中获取 parent ,这有点复杂但可行。在这种情况下,您需要将类别名称存储在 Solr 中。

关于solr地理层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4662892/

相关文章:

solr - DSE/Solr : Cannot record QUEUE latency

sql - 如何使 SQL 根据具有相同标签的项目创建标签层次结构?

r - 由特定变量进行分面包裹 + ggplot2 + r

elasticsearch - ElasticSearch:使用过滤器查询从所有结果中获取构面

javascript - 掌握 React 中的组件层次结构

jsf - 为什么我的 JSF 复合构面在未渲染构面时会进行验证

java - 在 Solr 中索引数据以进行搜索

java - Solr 异常 java & solr 初学者

java - Play Framework 2.4.6 不安装依赖项

javascript - 在js中访问子对象