PathHierarchyTokenizerFactory错误地匹配相似的路径

时间:2012-12-28 19:51:11

标签: solr lucene

我正在尝试使用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”时给出一些示例,以下内容应该匹配:

  • 烤箱&amp;滚刀|燃气灶
  • 烤箱&amp;滚刀|燃气灶|燃气灶(60厘米)

以下不应该:

  • 烤箱&amp;滚刀
  • 烤箱&amp;滚刀|烘炉
  • 橱柜操作面
  • 工作台|滚刀反射

使用当前设置,我得到的结果包含类似名称,如:

  • 工作台&amp; Splashbacks |厨房Splashbacks |滚刀Splashbacks |滚刀Splashbacks钢|滚刀Splashback
  • 烤箱&amp;滚刀|电动滚刀|感应滚刀|感应滚刀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>
然而,当搜索叶子节点时,它几乎正在工作,例如'Ovens&amp;滚刀|燃气灶|燃气灶(60厘米)'我得到的结果不应该匹配。

1 个答案:

答案 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>

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