search - Solr splitOnCaseChange 在查询时?

标签 search solr lucene split

我在 Solr 中得到了意想不到的结果,希望有人能提供帮助。我的 schema.xml 对于我正在搜索的字段(索引和查询)有 splitOnCaseChange="1",默认搜索行为是“OR”。

我有一个索引了“航空公司”一词的字段。当我搜索“航空公司”时,我得到了匹配项。当我搜索“航空公司别名”时,我得到了匹配项(正如预期的那样,因为它是 OR)。但是,当我搜索“AirlineAlias”时,我没有找到匹配项。我期望 splitOnCaseChange 属性将术语 AirlineAlias 查询分离为 2 个基本词。但是,如果发生这种情况,那么它应该找到与“航空公司”的匹配项(即它应该与“航空公司别名”完全相同的查询)。

我的理解正确吗?如果是这样,有什么想法可以解释为什么我无法获得正确的搜索结果吗?

我已从下面的 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" />

最佳答案

从 Solr 邮件列表上的 Jack Krupansky 那里得到了答案,因此在此更新以供将来的搜索者使用...

Just set autoGeneratePhraseQueries="false" on the ="text_en_splitting" field type. The current setting treated AirlineAlias as the quoted phrase "Airline Alias".

关于search - Solr splitOnCaseChange 在查询时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11995291/

相关文章:

json - Elasticsearch 中的映射和查询

search - Indexwriter 类中的 Forcemerge 函数

sql - 使用 Lucene QueryAPI 访问 SQL

java - 有效地查找对象数组中的元素

grails - 在Grails应用中动态显示用户

php - Solr HTTP 错误 'Unknown Field' 使用 Solarium 时出错

solr - 是否有处理莎士比亚英语的 Lucene 词干提取器?

search - Google 是否能够在没有 -site 字符串的情况下系统地禁止来自某些来源的结果?

c# - ASP.NET C# 在 SQL Server 数据库表中搜索

solr - 将数据导入solr时拆分多值字段