Использование 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>

In namedentities i have indexed multiword terms like: "diego alberto milito","diego armando maradona". I'm trying to search in both fields boosting them differently with a dismax query.

Но попробуйте с этим запросом: 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. В более старых версиях Solr значение по умолчанию равно 100 % (все пункты должны совпадать)».

и учитывая, что в моей схеме defaultOperator равен ИЛИ, почему без установки mm=0 я получаю значение mm по умолчанию, равное 100.

Заранее спасибо!


person Tywnil    schedule 13.02.2012    source источник
comment
Вывод отладочной версии проанализированного запроса также был бы полезен. Я подозреваю, что, поскольку вы токенизируете поле, ваш точный поиск не будет совпадать, поскольку ни одна из записей не является строкой, которую вы ищете, когда заключаете ее в кавычки.   -  person MatsLindh    schedule 14.02.2012
comment
благодаря. Я наконец обнаружил, что кавычки не означают точное совпадение, а ищут фразу: последовательная строка, поэтому я изменил свой анализатор схемы. Но нет способа справиться с токенами из нескольких слов... поэтому я помещаю в указатель отдельные слова и ищу фразы.   -  person Tywnil    schedule 14.02.2012


Ответы (1)


Наличие кавычек вокруг строки запроса выше приводит к фразовому запросу. Это означает, что учитываются только точные совпадения. Удалите их, заменив скобками, и поэкспериментируйте с параметрами pf, pf2 и pf3, чтобы получить более длинные совпадающие фразы.

person Simon    schedule 24.03.2014