Indexing WordDelimiterGraphFilterFactory的Solr短语查询问题

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

当我们在Solr中索引一个值为“1a b2”的字段“myfield”时,我们发现了一些意外的行为

用一个简单的查询myfield:(1ab2)查询我们想要的文档

但是当使用短语查询时,例如myfield:“1ab2”,我们意外地什么也没找到

我们的模式如下:

    <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