我在 SolrCloud 中有两个不同的集合 - test1 和 test3。当我在 test1 中搜索时,"BUG-123"
我在调试部分看到以下已解析的查询。
"debug": {
"rawquerystring": "\"BUG-123\"",
"querystring": "\"BUG-123\"",
"parsedquery": "PhraseQuery(_text_:\"bug 123\")",
"parsedquery_toString": "_text_:\"bug 123\"",
...}
"BUG-123"
而当我在中搜索时,test3
我在调试部分看到以下已解析的查询。
"debug": {
"rawquerystring": "\"BUG-123\"",
"querystring": "\"BUG-123\"",
"parsedquery": "PhraseQuery(_text_:\"bug ? 123\")",
"parsedquery_toString": "_text_:\"bug ? 123\"",
...}
请注意,如果出现test3
,"-"
字符将被替换为"?"
。因此,我在搜索结果中找不到任何文档。
我需要帮助来了解为什么-
会被取代?
以及如何避免它。
答案1
我可以解决这个问题。在 test3 集合的托管架构文件中,我在 text_en 字段类型的查询部分中包含了 AutoPhrasingTokenFilterFactory,如下所示
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/>
<filter class="solr.StopFilterFactory" words="lang/stopwords_en.txt" ignoreCase="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="com.lucidworks.analysis.AutoPhrasingTokenFilterFactory" includeTokens="true" phrases="autophrases.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
删除以下行并重新启动 solr cloud 即可解决问题。
<filter class="com.lucidworks.analysis.AutoPhrasingTokenFilterFactory" includeTokens="true" phrases="autophrases.txt"/>