У меня возникла проблема с поиском релевантных результатов поиска, работающих со словами с дефисами и без них. Я создал два документа, один с «wifi» и один с «wi-fi» в поле «text».Поиск Solr с дефисом
При поиске «wifi» оба документа отображаются в результатах поиска, что хорошо. При поиске «wi-fi» в результатах поиска появляется только документ с «wi-fi».
Вот моя конфигурация:
<field name="text" type="text" indexed="true" stored="true" omitNorms="true" />
<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
Вот результат analyzis: https://www.evernote.com/shard/s7/sh/f1bab83a-7fd5-4bf3-9e67-239ea0c71441/98b1103577638734fb9335f755591b82/deep/0/Solr-Admin-(jeanfrancoiscote.egzakt.com).png
Debug запроса при поиске "Wi-Fi". Я не могу понять, почему он не найдет оба документа:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
<lst name="params">
<str name="debugQuery">true</str>
<str name="indent">true</str>
<str name="q">wi-fi</str>
<str name="wt">xml</str>
</lst>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<int name="id">1869</int>
<str name="route">@sujet_simple?sujet_id=1869&slug=wi-fi</str>
<str name="name">Wi-fi</str>
<str name="text"><p>
Wi-fi</p>
</str>
<long name="_version_">1493472450933948416</long></doc>
</result>
<lst name="debug">
<str name="rawquerystring">wi-fi</str>
<str name="querystring">wi-fi</str>
<str name="parsedquery">MultiPhraseQuery(text:"(wi-fi wi) (fi wifi)")</str>
<str name="parsedquery_toString">text:"(wi-fi wi) (fi wifi)"</str>
<lst name="explain">
<str name="1869">
30.33298 = (MATCH) weight(text:"(wi-fi wi) (fi wifi)" in 0) [DefaultSimilarity], result of:
30.33298 = score(doc=0,freq=1.0 = phraseFreq=1.0
), product of:
0.99999994 = queryWeight, product of:
30.332981 = idf(), sum of:
7.684612 = idf(docFreq=1, maxDocs=1600)
7.684612 = idf(docFreq=1, maxDocs=1600)
7.684612 = idf(docFreq=1, maxDocs=1600)
7.2791467 = idf(docFreq=2, maxDocs=1600)
0.032967415 = queryNorm
30.332981 = fieldWeight in 0, product of:
1.0 = tf(freq=1.0), with freq of:
1.0 = phraseFreq=1.0
30.332981 = idf(), sum of:
7.684612 = idf(docFreq=1, maxDocs=1600)
7.684612 = idf(docFreq=1, maxDocs=1600)
7.684612 = idf(docFreq=1, maxDocs=1600)
7.2791467 = idf(docFreq=2, maxDocs=1600)
1.0 = fieldNorm(doc=0)
</str>
</lst>
<str name="QParser">LuceneQParser</str>
<lst name="timing">
<double name="time">1.0</double>
<lst name="prepare">
<double name="time">0.0</double>
<lst name="query">
<double name="time">0.0</double>
</lst>
<lst name="facet">
<double name="time">0.0</double>
</lst>
<lst name="mlt">
<double name="time">0.0</double>
</lst>
<lst name="highlight">
<double name="time">0.0</double>
</lst>
<lst name="stats">
<double name="time">0.0</double>
</lst>
<lst name="debug">
<double name="time">0.0</double>
</lst>
</lst>
<lst name="process">
<double name="time">1.0</double>
<lst name="query">
<double name="time">0.0</double>
</lst>
<lst name="facet">
<double name="time">0.0</double>
</lst>
<lst name="mlt">
<double name="time">0.0</double>
</lst>
<lst name="highlight">
<double name="time">0.0</double>
</lst>
<lst name="stats">
<double name="time">0.0</double>
</lst>
<lst name="debug">
<double name="time">1.0</double>
</lst>
</lst>
</lst>
</lst>
</response>
Спасибо за вашу помощь.
любой удачи до сих пор? –
Нет, еще не найдено. – Tiois
Вам может быть интересен аналогичный вопрос, который я опубликовал недавно: http://stackoverflow.com/questions/29783237/solr-search-with-various-combinations-of-space-hyphen-casing-and-punctuations –