2016-06-09 5 views
1

Существует запрос, который содержит необязательные (необязательные) предложения обязательные и запрещенные токены. Следующие два запроса возвращают разные результаты. Но должен быть такой же, а не?Запрос Solr Dismax и Edismax дает различные результаты по тому же запросу

+_query_:"{!type=**dismax** mm='2<2 3<3 5<4 7<51%' qf='normalizedField'} opt1 opt2 +mandatory -prohibited" 

В.С.

+_query_:"{!type=**edismax** mm='2<2 3<3 5<4 7<51%' qf='normalizedField'} opt1 opt2 +mandatory -prohibited" 

с минимальным "должен" параметра Match:

мм: "2 51%"

Любые идеи? Благодаря

Обновлено Существует документ в индексе Solr:

{ 
    ... 
    "normalizedField":"opt1 opt3 mandatory" 
    ... 
} 

поиск с dismax запроса:

+_query_:"{!type=dismax mm='2<2 3<3 5<4 7<51%' qf='normalizedField'} opt1 opt2 +mandatory -prohibited" 

"parsedquery_toString":"+(((normalizedField:opt1) (normalizedField:opt2) +(normalizedField:mandatory) -(normalizedField:prohibited))~2)()" 

возвращенной пустой результат (как и ожидалось)

НО

поиск с edismax запроса:

+_query_:"{!type=edismax mm='2<2 3<3 5<4 7<51%' qf='normalizedField'} opt1 opt2 +mandatory -prohibited" 

"parsedquery_toString": "+((normalizedField:opt1) (normalizedField:opt2) +(normalizedField:mandatory) -(normalizedField:prohibited))" 

возвращение этого документа. ЗАЧЕМ?

+0

утилизатор работает как ожидалось, но edisamax not ( –

ответ

2

похоже я нашел решение. Я использовал версию 5.2 solr с известной проблемой (https://issues.apache.org/jira/browse/SOLR-2649). После обновления до версии 5.5.1 проблема решена), а edismax работает так же, как и demax (для моего примера)

0

edismax и dismax не идентичны (в этом случае не было бы никакой причины вводить edismax). edismax расширяет набор синтаксиса и магии дымохода, by introducing several new features:

  • поддерживает полный синтаксис синтаксиса запросов Lucene.
  • поддерживает запросы, такие как AND, OR, NOT, - и +.
  • рассматривает «и» и «или» как «И» и «ИЛИ» в синтаксическом режиме Lucene.
  • уважает имена «магического поля» _val_ и _query_. Это не реальные поля в Схеме, но при использовании они помогают делать специальные вещи (например, запрос функции в случае _val_ или вложенный запрос в случае _query_). Если _val_ используется в терминологическом или фразовом запросе, значение анализируется как функция.
  • включает улучшенное интеллектуальное частичное экранирование в случае синтаксических ошибок; в этом режиме по-прежнему поддерживаются заданные запросы, +/- и фразовые запросы.
  • улучшает близость, повышающую с использованием черепицы; вам не нужно, чтобы запрос соответствовал всем словам в документе, прежде чем применяется повышение близости.
  • включает в себя расширенную обработку стоп-слова: в обязательной части запроса не требуются стоп-слова, но они все еще используются в части, повышающей близость. Если запрос состоит из всех стоп-слов, например «быть или не быть», тогда требуются все слова.
  • содержит улучшенную функцию повышения: в расширенном режиме DisMax функция повышения является множителем, а не добавлением, улучшая результаты форсирования; также поддерживаются функции повышения аддитивности DisMax (bf и bq).
  • поддерживает чисто отрицательные вложенные запросы: такие запросы, как + foo (-foo), будут соответствовать всем документам.
  • позволяет указать, по каким полям разрешен запрос конечного пользователя, и запретить поиск в прямом поле.

Я выделил те, которые могут легко повлиять на оценку, в то время как такие функции, как «отрицательные вложенные запросы», изменят, какие документы включены. То же самое может произойти из-за поддержки полного синтаксиса парсера запроса lucene.

Самый простой способ узнать, что происходит, это использовать функцию Solr, чтобы вы могли видеть оценки и точно, к чему расширяется запрос на разборку и edismax.

.., и если работа с камешками, вы можете просто использовать это.

+0

Я не могу использовать утилизацию, потому что он не поддерживает нечеткие ( –

+0

Обновленный вопрос с пример –

 Смежные вопросы

  • Нет связанных вопросов^_^