当我们在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管理员分析页面,这很有意义。但是用户不会输入。
有人知道我们如何准确地查询“ 1a b2”吗?谁能说明我们做错了什么
谢谢!