У меня есть две разные коллекции - test1 и test3 в SolrCloud. Когда я ищу "BUG-123"
в test1 я вижу следующий проанализированный запрос в разделе отладки.
"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
, "-"
персонаж заменяется на "?"
. Из-за этого я не получаю никаких документов в результатах поиска.
Мне нужна помощь, чтобы понять почему -
заменяется на ?
и как этого избежать.
Я смог решить эту проблему. В файле управляемой схемы для коллекции test3 я включил AutoPhrasingTokenFilterFactory в раздел запроса для типа поля text_en, как показано ниже.
<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 решило проблему.
<filter class="com.lucidworks.analysis.AutoPhrasingTokenFilterFactory" includeTokens="true" phrases="autophrases.txt"/>