我正在尝试使用PathHierarchyTokenizerFactory标记生成器的路径来创建构面,以允许用户过滤我的应用程序中的部门。这样做的原因是部门可以生孩子,这似乎是处理等级结构的最佳方式。
目前我正在使用以下scheme.xml
<fieldType name="text_path" class="solr.TextField">
<analyzer>
<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="|" />
</analyzer>
</fieldType>
<field name="department_path" type="text_path" indexed="true" stored="true" multiValued="true"/>
然而,这会导致匹配问题。在搜索“department_path:Ovens&amp; Hobs | Gas Hobs”时给出一些示例,以下内容应该匹配:
以下不应该:
使用当前设置,我得到的结果包含类似名称,如:
如果有人知道我应该如何改变那种很棒的类型。
由于
编辑:
将schema.xml更改为
后<fieldType name="descendent_path" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="\" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory" />
</analyzer>
</fieldType>
然而,当搜索叶子节点时,它几乎正在工作,例如'Ovens&amp;滚刀|燃气灶|燃气灶(60厘米)'我得到的结果不应该匹配。
答案 0 :(得分:1)
好的,对于将来阅读此内容的人来说,我的代码存在两个问题。第一个是我在索引和查询期间运行PathHierarchyTokenizerFactory。根据我的需要,我只需要在索引编制期间运行此标记器。结果类型是:
<fieldType name="descendent_path" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="|" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory" />
</analyzer>
</fieldType>
另一个问题是我没有正确地转移导致某些部门名称出现问题的输入。