Indexing WordDelimiterGraphFilterFactory的Solr短语查询问题
当我们在Solr中索引一个值为“1a b2”的字段“myfield”时,我们发现了一些意外的行为 用一个简单的查询myfield:(1ab2)查询我们想要的文档 但是当使用短语查询时,例如myfield:“1ab2”,我们意外地什么也没找到 我们的模式如下:Indexing WordDelimiterGraphFilterFactory的Solr短语查询问题,indexing,solr,lucene,Indexing,Solr,Lucene,当我们在Solr中索引一个值为“1a b2”的字段“myfield”时,我们发现了一些意外的行为 用一个简单的查询myfield:(1ab2)查询我们想要的文档 但是当使用短语查询时,例如myfield:“1ab2”,我们意外地什么也没找到 我们的模式如下: <fieldType name="full_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true" positionIncrementGap="10
<fieldType name="full_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="1"
splitOnCaseChange="1"
preserveOriginal="1"
splitOnNumerics="1"
stemEnglishPossessive="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="1"
catenateAll="1"
splitOnCaseChange="1"
preserveOriginal="1"
splitOnNumerics="1"
stemEnglishPossessive="1"
/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"/>
<filter class="solr.FlattenGraphFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<field name="myfield" type="full_ci" indexed="true" stored="false" required="false" multiValued="true"/>
查看Solr admin analysis页面,我们可以看到该值是如何索引的,如图所示。WordDelimiterGraphFilterFactory似乎使“b2”出现在位置3,我们猜测这就是为什么我们的短语查询“1a b2”没有成功(因为在这个短语中,b2位于位置2?)
如果我们将短语查询更改为“1AB2”或“1AB2”,那么我们确实会得到一个结果,根据Solr管理分析页面,这是有意义的。但是用户不会输入这个
有人知道我们怎样才能准确地查询“1a b2”这个短语吗?谁能解释一下我们做错了什么
谢谢 这至少在设置了
7.3.0
的情况下可以正常工作。索引内容foo 1a b2条
在搜索内容时会导致命中:“1a b2”
。你有同义词吗?嗨,MatsLindh,谢谢!,查看同义词文件,确实有一些相关部分。我们更新了问题以显示这一点。当我们删除这些同义词时,我们得到了预期的行为——但对我们来说,同义词对于其他事情很重要。有没有一种方法可以让它在保持同义词的同时工作?根据的一个线程,同义词图过滤器不能直接将另一个图过滤器的输出作为其输入。我的最佳结果是将FlattGraphFilter移动到WordDelimiterGraphFilter之后,然后将其放在同义词GraphFilter之后(如果我理解正确,仅当作为最后一项进行索引时才需要)。确认它没有破坏任何其他东西。。。还请记住,您可以使用具有不同定义的多个字段,因此可以有一个具有同义词的字段和一个不具有同义词的字段;至少这会给你不需要同义词的短语匹配hi@MatsLindh,非常感谢你的帮助,我移动了订单,解决了问题。基于您的帮助,我将用最终解决方案回答问题。
one,1
i,1
two,2
ii,2