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”的内容。然而,在某些情况下,这是行不通的
可以使用由不同数量的连字符分隔的术语的玩具数据集来复制:
- 一二三四
- 一二三四
- 一二三四
- 一二三四
- 等等
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似乎对索引、查询或两者都没有影响。