【问题标题】:Solr cannot find all terms after WordDelimiterGraphFilterSolr 找不到 WordDelimiterGraphFilter 之后的所有术语
【发布时间】:2019-08-07 17:46:20
【问题描述】:

我有一个简单的WhitespaceTokenizer 后跟WordDelimiterGraphFilter 的字段类型。这应该允许使用诸如“电子邮件”之类的词组查询来查找同时包含“电子邮件”和“电子邮件”的内容。但是,在某些情况下,这不起作用。

这可以通过由不同数量的连字符分隔的术语玩具数据集来重现:

  • 一二三四
  • 一二三四
  • 一二三四
  • 一二三四
  • 等等……

该问题的旧版本使用 6 个单字符术语,a-b-c-d-e-f。

总共有 8 种组合(连字符的三个可能位置)。这意味着搜索上述任何一项都会找到全部 8 个。

但是,将找不到某些短语查询组合。例如,搜索“一二三四”会找到除自身之外的所有 7 个字词(另一方面,“二三四”有效)。

schema.xml中的fieldType如下:

<fieldType name="text_wrong" class="solr.TextField" positionIncrementGap="100" indexed="true" stored="true" multiValued="false" omitNorms="true">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory" />
        <filter class="solr.WordDelimiterGraphFilterFactory"
                generateWordParts="1" generateNumberParts="1" catenateWords="0"
                catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"
                splitOnNumerics="0" preserveOriginal="1" />
        <filter class="solr.FlattenGraphFilterFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory" />
        <filter class="solr.WordDelimiterGraphFilterFactory"
                generateWordParts="1" generateNumberParts="1" catenateWords="0"
                catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"
                splitOnNumerics="0" preserveOriginal="1" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
</fieldType>

将查询斜率增加到 2 会找到所有结果,但也会找到其他不准确的类似结果(不良行为)。

也可以通过设置preserveOriginal=0来“修复”。但我不确定可能会对我们的搜索造成什么其他副作用,而且这似乎不是正确的行为。

分析如下:

如您所见,“四”的位置现在位于“4”位置,尽管它是“一二三四”中的第三个词。但这应该与查询中的位置相匹配(相同)。

这是正确的还是错误的?

【问题讨论】:

    标签: solr


    【解决方案1】:

    您缺少index time Flatten Graph Filter

    WordDelimiterGraphFilter

    此过滤器在单词分隔符处拆分标记。

    如果您在索引期间使用此过滤器,则必须在其后使用 Flatten Graph Filter 以将标记彼此压扁,就像 Word Delimiter Filter 一样,因为索引器无法直接使用图形。要在拆分标记时获得完全正确的位置查询,您应该在查询时使用此过滤器。

    【讨论】:

    • 感谢您的回答。不幸的是,FGF 似乎对应用于索引、查询或两者都没有影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2012-02-02
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多