我在 Solr 中得到了意想不到的结果,希望有人能提供帮助。我的 schema.xml 对我正在搜索的字段(索引和查询)具有 splitOnCaseChange="1",并且默认搜索行为是“OR”。
我有一个索引“航空公司”一词的字段。当我搜索“航空公司”时,我得到了匹配。当我搜索“航空公司别名”时,我得到了匹配(正如预期的那样,因为它是 OR)。但是,当我搜索“AirlineAlias”时,我找不到匹配项。我期待 splitOnCaseChange 属性将 AirlineAlias 查询分离为 2 个基本词。但是,如果发生这种情况,那么它应该找到与“Airline”的匹配项(即,它应该是与“Airline Alias”完全相同的查询)。
我的理解正确吗?如果是这样,关于为什么我不会得到正确的搜索结果的任何想法?
我已经从下面的 schema.xml 文件中复制了相关部分。
在此先感谢您的帮助。
<fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
enablePositionIncrements="true" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" />
<filter class="solr.PorterStemFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
enablePositionIncrements="true" />
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" />
<filter class="solr.PorterStemFilterFactory" />
</analyzer>
</fieldType>
<fields>
<field name="value" type="text_en_splitting" indexed="true" stored="true" multiValued="true" omitNorms="true" />
/fields>
<solrQueryParser defaultOperator="OR" />