我一直在试图找到一种方法来实现在solr中使用层次结构进行分区,并且无法弄清楚如何在我的情况下执行此操作。我已经阅读了几篇关于在solr中执行层次结构的文章以及补丁64和792中的解决方案。我遇到的主要问题是我有可以属于层次结构的多个分支的实体。我的数据的当前形式是具有用于国家,州和城市的MVA的用户文档。
例如,人们可以将他们的服务列为城市级别的地理层次结构。一个人可以服务所有阿拉巴马州,但只服务于格鲁吉亚的某些城镇。现在,州一级的分面计数统计为阿拉巴马州为1和格鲁吉亚为1的区域提供服务的不同个体,当向下扩展到城市级别时,每个城市都有一个计数(换句话说,城市的总和)计数不一定等于状态计数,因为计数不是相互排斥的。)
US(1)乔治亚(1)亚特兰大(1)阿拉巴马州(1)
哥伦布(0)
雅典(0)移动(1)
伯明翰(1)
亨茨维尔(1)
我要挂断的部分是当我在城市面对时我无法知道他们属于哪个状态,因为用户在阿拉巴马州和格鲁吉亚都被列入,我无法找到一种相关的方式相互之间的属性。如果solr-64支持多个分支,如US / Alabama / Mobile /和US / Georgia / Atlanta /同一文档,则可能有效。截至目前,我还没有能够通过夜间构建进行编译,所以我有点陷入困境。
有没有人有更好的方法呢?
答案 0 :(得分:2)
请参阅描述的第一个用例here。 (客户端处理索引和查询必要!)
类别导航
问题:您有一个类别树,您的产品被分类为多个类别。
这个问题有两个相对类似的解决方案。我将描述其中一个:
但是,如果您只想显示一个级别的类别呢?例如。如果你一次不想要其他级别,或者它们太多了。
然后索引类别字段ala <level>_category
。为此,您需要在索引时在RAM中使用完整的类别树。然后使用facet.prefix=<level>_
过滤级别的类别列表
fq=category:”<level>_categoryId”
如果您过滤了该级别,则仍有一个问题:
问:如何显示从所选类别到根类别的路径?
答:通过数据库获取类别父项,如果您在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)
查看Pivot(即决策树)Faceting:http://wiki.apache.org/solr/SimpleFacetParameters#Pivot_.28ie_Decision_Tree.29_Faceting
Solr 4.0支持
答案 3 :(得分:0)
假设索引中的文档代表单个服务....
对于城市,使用某种分隔符制造一个与城市连接的州。此字段不必一直显示给用户,它可以是您存储的字段的补充,但不会索引该城市的真实姓名。
例如,您可以使用值为:
的city_facet字段您可能想要选择更安全的分隔符。我想连字号可能是一个潜在的冲突。