WordDelimiterGraphFilterFactory

时间:2018-07-06 10:09:27

标签: indexing solr lucene

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

使用myfield:(1a b2)这样的简单查询进行查询即可获得我们想要的文档的点击量。

但是当使用短语查询(例如myfield:“ 1a b2”)时,我们出乎意料地没有击中任何东西。

我们的架构如下:

    <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"/>

我们的同义词.txt文件包含以下信息:

one,1
i,1
two,2
ii,2

在Solr管理员分析页面中,我们可以看到如何对值进行索引,如图所示。 WordDelimiterGraphFilterFactory似乎使“ b2”出现在位置3,我们猜测这是为什么短语查询“ 1a b2”没有被点击(因为在这个短语中,b2在位置2?)。

如果我们将词组查询更改为“ 1 a b 2”或“ 1 a b2”,那么我们的确会获得成功,根据Solr管理员分析页面,这很有意义。但是用户不会输入。

Solr analysis print screen

有人知道我们如何准确地查询“ 1a b2”吗?谁能说明我们做错了什么

谢谢!

0 个答案:

没有答案