0

我正在尝试使用 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)”,我得到的结果不应该匹配。

4

1 回答 1

2

好的,所以对于将来阅读本文的任何人来说,我的代码都有两个问题。首先是我在索引和查询期间都在运行 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>

另一个问题是我没有正确转义导致某些部门名称出现问题的输入。

于 2012-12-30T13:27:00.950 回答