2016-06-09 8 views
1

선택적 ("should"절) 필수 및 금지 토큰을 포함하는 쿼리가 있습니다. 다음 두 쿼리는 다른 결과를 반환합니다. 하지만 동일해야하지, 그렇지 않아?Solr Dismax 및 Edismax 요청이 동일한 쿼리에 대해 다른 결과를 표시합니다.

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

VS

」할 '검색 파라미터 최소
+_query_:"{!type=**edismax** mm='2<2 3<3 5<4 7<51%' qf='normalizedField'} opt1 opt2 +mandatory -prohibited" 

:

mm "2 < 2 3 < 3-5 < 4~7 < 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

dismax는 예상대로 작동하지만 edisamax가 아닙니다 ( –

답변

2

것 같습니다. 나는 알려진 문제 (https://issues.apache.org/jira/browse/SOLR-2649)와 함께 5.2 solr 버전을 사용했습니다. 버전 5.5.1 로의 업그레이드 후 문제가 해결됨) 및 edismax는 dismax와 동일하게 작동합니다 (예를 들어)

0

edismax와 dismax는 동일하지 않습니다 (이 경우에는 edismax를 도입 할 이유가 없습니다). edismax는 dismax의 구문 집합과 마법을 확장합니다. by introducing several new features :

  • 은 전체 Lucene 쿼리 구문 분석기 구문을 지원합니다.
  • 은 AND, OR, NOT, - 및 +와 같은 쿼리를 지원합니다.
  • 은 Lucene 구문 모드에서 "and"및 "or"를 "AND"및 "OR"로 처리합니다.
  • 은 '마법 필드'_val_ 및 _query_ 이름을 따릅니다. 이것들은 Schema의 실제 필드가 아니지만, 사용된다면 (_val_의 경우 함수 쿼리 또는 _query_의 경우 중첩 된 쿼리와 같은) 특별한 작업을하는 데 도움이됩니다. 용어 또는 구문 쿼리에서 _val_이 사용되면 값은 함수로 구문 분석됩니다.
  • 은 구문 오류의 경우 향상된 스마트 부분 이스케이프 처리를 포함합니다. 필드 화 된 쿼리, +/- 및 구문 쿼리는이 모드에서 계속 지원됩니다.
  • 은 단어 대상 포진을 사용하여 근접 부스팅을 개선합니다. 근접 확대가 적용되기 전에 쿼리를 문서의 모든 단어와 일치시킬 필요가 없습니다.
  • 에는 고급 스톱 워드 처리가 포함되어 있습니다. : 스톱 워드는 쿼리의 필수 부분에는 필요 없지만 근접 부양 부분에서 계속 사용됩니다. 쿼리가 "중지 될 것"이 아닌 모든 중지 단어로 구성된 경우 모든 단어가 필요합니다.
  • 은 향상된 부스트 기능을 포함합니다. : 확장 된 DisMax에서 부스트 기능은 가산기가 아닌 곱셈기이므로 부스트 결과가 향상됩니다. DisMax (bf 및 bq)의 첨가물 부스트 기능도 지원됩니다.
  • 은 순수 네거티브 중첩 쿼리를 지원합니다. + foo (-foo)와 같은 쿼리는 모든 문서와 일치합니다.
  • 을 사용하면 최종 사용자가 쿼리 할 수있는 필드를 지정하고 직접 필드가 지정된 검색을 허용하지 않을 수 있습니다.

"순수 네거티브 중첩 쿼리"와 같은 기능이 포함되는 문서는 포함되지만 득점에 영향을 줄 수있는 것은 굵게 표시했습니다. 전체 lucene 쿼리 구문 분석기 구문을 지원하기 때문에 동일한 문제가 발생할 수 있습니다.

무슨 일이 일어나고 있는지 실제로 확인하는 가장 쉬운 방법은 Solr의 debugQuery 기능을 사용하는 것입니다. 그러면 점수와 정확하게 dismax 및 edismax 쿼리가 확장 된 것을 볼 수 있습니다.

.. dismax가 작동하면 그냥 사용할 수 있습니다.

+0

) 퍼지를 지원하지 않기 때문에 dismax를 사용할 수 없습니다. ( –

+0

예 –