solr地理层次结构

时间:2011-01-11 21:30:55

标签: solr hierarchy facet

我一直在试图找到一种方法来实现在solr中使用层次结构进行分区,并且无法弄清楚如何在我的情况下执行此操作。我已经阅读了几篇关于在solr中执行层次结构的文章以及补丁64和792中的解决方案。我遇到的主要问题是我有可以属于层次结构的多个分支的实体。我的数据的当前形式是具有用于国家,州和城市的MVA的用户文档。

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

US(1)
乔治亚(1)
亚特兰大(1)
哥伦布(0)
雅典(0)
阿拉巴马州(1)
移动(1)
伯明翰(1)
亨茨维尔(1)

我要挂断的部分是当我在城市面对时我无法知道他们属于哪个状态,因为用户在阿拉巴马州和格鲁吉亚都被列入,我无法找到一种相关的方式相互之间的属性。如果solr-64支持多个分支,如US / Alabama / Mobile /和US / Georgia / Atlanta /同一文档,则可能有效。截至目前,我还没有能够通过夜间构建进行编译,所以我有点陷入困境。

有没有人有更好的方法呢?

4 个答案:

答案 0 :(得分:2)

请参阅描述的第一个用例here。 (客户端处理索引和查询必要!)

类别导航

问题:您有一个类别树,您的产品被分类为多个类别。

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

  • 创建一个名为“category”的多值字符串字段。使用类别ID(或名称,如果您想避免数据库查询)。
  • 您有一个类别树。确保文档不仅包含叶子类别,还包括所有类别,直到根节点。
  • 现在以“-1”作为限制
  • 在类别字段上方面
  • 但是,如果您只想显示一个级别的类别呢?例如。如果你一次不想要其他级别,或者它们太多了。

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

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

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

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

答案 1 :(得分:1)

我对你的问题并不熟悉,但似乎你需要做一个分组的城市,州。

查看SOLR中的分组功能,称为字段折叠(http://wiki.apache.org/solr/FieldCollapsing)。

另外,请看一下bobo-browse。具体来说,compositeFacetHandlers http://code.google.com/p/bobo-browse/wiki/CompositeFacetHandlers。 bobo-browse可以集成到SOLR中(http://code.google.com/p/bobo-browse/wiki/SolrIntegration)

答案 2 :(得分:1)

答案 3 :(得分:0)

假设索引中的文档代表单个服务....

对于城市,使用某种分隔符制造一个与城市连接的州。此字段不必一直显示给用户,它可以是您存储的字段的补充,但不会索引该城市的真实姓名。

例如,您可以使用值为:

的city_facet字段
  • “俄亥俄州 - 迈阿密”
  • “佛罗里达 - 迈阿密”

您可能想要选择更安全的分隔符。我想连字号可能是一个潜在的冲突。