Использование dismax для поиска терминов с несколькими словами
Моя схема solr следующая (только важные части):
<fieldType name="bagofwords_expertfinding" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<!-- remove letters repeated more than two times -->
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="^[0-9-/_,\.]+$" replacement="" replace="all"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="^.*(([aA-zZ])\\2)\\2+.*$" replacement=""/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.LengthFilterFactory" min="3" max="100"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="^[0-9-/_,\.]+$" replacement="" replace="all"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.LengthFilterFactory" min="3" max="100"/>
</analyzer>
</fieldType>
<fieldType name="namedentities_expertfinding" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<!-- remove letters repeated more than two times -->
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern="\s," replacement=","/>
<charFilter class="solr.PatternReplaceCharFilterFactory" pattern=",\s" replacement=","/>
<tokenizer class="solr.PatternTokenizerFactory" pattern="," />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords_en.txt"
enablePositionIncrements="true"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="^[0-9-/_,\.]+$" replacement="" replace="all"/>
<filter class="solr.LengthFilterFactory" min="3" max="100"/>
</analyzer>
</fieldType>
В именных именах я проиндексировал несколько слов: "Диего Альберто Милито","Диего Армандо Марадона". Я пытаюсь искать в обоих полях, увеличивая их по-разному с помощью запроса dismax.
Но попробуем с этим запросом: localhost:8080/solr/select/? Q ="diego armando maradona"&defType=dismax&qf=namedentities^100 bagofwords^1&fl=*, Score&debugQuery=true&mm=0
Solr не находит ничего. Может быть, я не понимаю правильное использование символа.
Я не понимаю также, учитывая это из Solr Wiki:
"В Solr 1.4 и более ранних версиях вы должны в основном установить mm = 0, если хотите получить эквивалент q.op=OR, и mm=100%, если хотите получить эквивалент q.op=AND. В 3.x и транке значение по умолчанию mm определяется параметром q.op (q.op=AND => mm=100%; q.op=OR => mm=0%). Имейте в виду, что на схему по умолчанию влияет ваша схема.xml entry. В более старых версиях Solr значение по умолчанию составляет 100% (все пункты должны совпадать)"
и учитывая, что в моей схеме defaultOperator - ИЛИ, почему, не устанавливая mm = 0, я получаю значение mm по умолчанию 100.
Заранее спасибо!
1 ответ
Наличие кавычек вокруг строки запроса выше вызывает запрос фразы. Это означает, что рассматриваются только точные совпадения. Удалите их, заменив паренами, и поэкспериментируйте с параметрами pf и pf2 и pf3, чтобы увеличить более подходящие фразы.