我正在尝试使用 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 & Hobs|Gas Hobs”时给出一些示例,以下内容应匹配:
- 烤箱和炉灶|燃气灶
- 烤箱和炉灶|燃气灶|燃气灶(60cm)
以下不应该:
- 烤箱和滚刀
- 烤箱和滚刀|烤箱
- 台面
- 台面|滚刀防溅板
使用当前设置,我得到包含类似名称的结果,例如:
- 台面和防溅板|厨房防溅板|滚刀防溅板|滚刀防溅板钢|滚刀防溅板
- 烤箱和滚刀|电滚刀|电磁炉|电磁炉 60cm
如果有人知道我应该如何更改类型,那就太好了。
谢谢
编辑:
将我的 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>
它几乎可以正常工作,但是在搜索叶节点时,例如“烤箱和滚刀|燃气滚刀|燃气滚刀(60cm)”,我得到的结果不应该匹配。