Назад | Перейти на главную страницу

В запросе solr дефис заменяется знаком вопроса

У меня есть две разные коллекции - 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"/>