У меня проблемы с Solr. Я хочу, чтобы он объединял слова в поисковом запросе. Например, я хочу иметь возможность искать «ссылку на данные» и находить документ, содержащий «ссылку на данные» (Google делает это — так почему это так сложно с Solr?).
Вот настройки индекса и анализатора запросов из 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"
/>
<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>
<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"
/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1"
generateNumberParts="1"
catenateWords="1"
catenateNumbers="0"
catenateAll="0"
splitOnCaseChange="1"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
Это вывод debugQuery при поиске «ссылки данных»:
"rawquerystring": "\"data link\"\n",
"querystring": "\"data link\"\n",
"parsedquery": "PhraseQuery(text:\"data link\")",
"parsedquery_toString": "text:\"data link\"",
Это вывод debugQuery, когда я ищу "связь данных" - это также не соответствует "ссылке данных", хотя кажется, что она есть в MultiPhraseQuery? Может кто-нибудь объяснить?
"rawquerystring": "\"data-link\"\n",
"querystring": "\"data-link\"\n",
"parsedquery": "MultiPhraseQuery(text:\"(data datalink) link\")",
"parsedquery_toString": "text:\"(data datalink) link\"",