2014-09-30 3 views
2

필드를 nGram 및 'exact'일치 항목으로 매핑하려고합니다. 검색 결과에서 정확한 일치 항목을 먼저 표시하려고합니다. 이것은 answer to a similar question이지만 작동하게하기 위해 고심 중입니다.elasticsearch에서 nGram 이상의 정확한 일치 검색

내가 '정확한'입력란에 지정한 부스트 값에 상관없이 나는 매회 동일한 결과를 얻습니다.

"name" : { 
    "type" : "multi_field", 
    "fields" : { 
     "name" : { 
     "type" : "string", 
     "boost" : 2.0, 
     "analyzer" : "ngram" 
     }, 
     "exact" : { 
     "type" : "string", 
     "boost" : 4.0, 
     "analyzer" : "simple", 
     "include_in_all" : false 
     } 
    } 
    } 

그리고이 같은 쿼리가 모습입니다 :

{ 
    "query": { 
     "filtered": { 
      "query": { 
       "query_string": { 
        "fields":["name","name.exact"], 
        "query":"Woods" 
       } 
      } 
     } 
    } 
} 

답변

2

multi_field 매핑은 정확하지만 검색 쿼리는 다음과 같이 변경해야합니다 :

{ 
    "query": { 
     "filtered": { 
      "query": { 
       "multi_match": { # changed from "query_string" 
        "fields": ["name","name.exact"], 
        "query": "Woods", 
        # added this so the engine does a "sum of" instead of a "max of" 
        # this is deprecated in the latest versions but works with 0.x 
        "use_dis_max": false 
       } 
      } 
     } 
    } 
} 

지금 결과가 계정에 '정확한'일치를 가지고 점수까지 추가합니다.

1

이 점수

Elasticsearch는 설명을 생산하는 옵션이 계산 방법은 과소이 내 필드 매핑 모습입니다 모든 검색 결과와 함께 Explain 스 매개 변수를 설정하여

POST <Index>/<Type>/_search?explain&format=yaml 
{ 
"query" : " ....." 
} 

이 모든 히트의 출력을 많이 생산할 예정 진실하고 그 압도적 될 수 있지만, 그것은 가치가 모든 것이

의 출력을 무엇을 의미하는지 이해하기 위해 몇 시간을내어 eplian는 YAML이 문서가 일치하는 이유를 쉽게 이해

을 읽을 수 있습니다 또는

당신이 SPE에 쿼리를 전달할 수 없습니다 = 그래서 형식을 추가, JSON에서 읽기 어렵게 될 수도 있습니다 아래에있는 것과 같은 cific 문서는 어떻게 매칭이 이루어지고 있는지를 설명합니다.

GET <Index>/<type>/<id>/_explain 
{ 
"query": "....." 
} 
+1

감사합니다. 이 정보가있는 페이지는 http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/relevance-intro.html입니다 (다른 사용자에게 도움이 될 수 있음). – Calin