Solr无法在WordDelimiterGraphFilter之后找到所有术语

Solr无法在WordDelimiterGraphFilter之后找到所有术语,solr,Solr,我有一个字段类型,它有一个简单的空白标记符,后跟一个字分隔符graphfilter。这应该允许使用“E-mail”等术语的短语查询查找同时包含“E-mail”和“E-mail”的内容。然而,在某些情况下,这是行不通的 可以使用由不同数量的连字符分隔的术语的玩具数据集来复制: 一二三四 一二三四 一二三四 一二三四 等等 问题的旧版本使用了6个单字符术语,a-b-c-d-e-f 总共有8个组合(对于连字符的三个可能位置)。这意味着搜索上述任何一项都会找到所有8项 但是,找不到短语查询的某些组合

我有一个字段类型,它有一个简单的
空白标记符
,后跟一个
字分隔符graphfilter
。这应该允许使用“E-mail”等术语的短语查询查找同时包含“E-mail”和“E-mail”的内容。然而,在某些情况下,这是行不通的

可以使用由不同数量的连字符分隔的术语的玩具数据集来复制:

  • 一二三四
  • 一二三四
  • 一二三四
  • 一二三四
  • 等等
问题的旧版本使用了6个单字符术语,a-b-c-d-e-f

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

但是,找不到短语查询的某些组合。例如,搜索“一二三四”会找到除自身以外的所有7个术语(“二三四”则有效)

schema.xml
中的
字段类型如下所示:

<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”,尽管它是“一二三四”中的第三个词。但这应该与查询中的位置(相同)匹配

这是正确的还是错误?

您缺少一个错误

此筛选器在单词分隔符处拆分标记

如果在索引过程中使用此过滤器,则必须使用扁平图过滤器将标记压扁,就像单词分隔符过滤器一样,因为索引器不能直接使用图形。要在分割标记时获得完全正确的位置查询,您应该在查询时使用此过滤器


谢谢你的回答。不幸的是,FGF似乎对索引、查询或两者都没有影响。