2012-05-25 1 views
7

나는 그것은 기대 작품으로는 탄성 검색에서해야 조항의 결과의 수를 제한

{ 
    'size': 10, 
    'from': 0, 

    'query': { 
    'bool': { 
     'should': [ 
     {'text': {'title': { 'query': 'some words' }}}, 
     {'text': {'title': { 'query': 'other words' }}}, 
     {'text': {'title': { 'query': 'some other words' }}}, 
     ] 
    } 
    } 
} 

처럼, 여러 문구 중 하나와 일치하는 결과를 얻을 수있는 쿼리를 쓰고 있어요,하지만 난 문제가 : 10 점수가 매겨진 결과는 모두 같은 문구와 일치합니다.

해결책은 각 should 절의 결과 수를 5 개 요소로 제한하는 것입니다.

문제는 탄성 검색 쿼리를 사용하여 구현하는 방법을 볼 수 없으며 가능하면 가능하지 않거나 내가 원하는 것을 수행하는 또 다른 방법이 있는지 여부입니다.

아이디어가 있으십니까?

감사합니다.

답변

10

ElasticSearch는 3 개의 쿼리 조합을 얻으려는 동안 쿼리와 일치하는 "가장 관련성 높은"문서를 찾고 있습니다. multi search 사용

세 개의 쿼리를 실행하는 것이 작업을 수행하는 가장 간단한 (빠른) 방법 :

curl -XGET 'http://127.0.0.1:9200/my_index/_msearch?pretty=1' -d ' 
{} 
{"query" : {"text" : {"title" : "some words"}}, "size" : 5} 
{} 
{"query" : {"text" : {"title" : "some other words"}}, "size" : 5} 
{} 
{"query" : {"text" : {"title" : "other words"}}, "size" : 5} 
' 

대안, 요구 사항에 따라하면 limit filter를 사용하지만, 그것을 제한하는 것을주의하는 것이 될 수있다 인덱스마다가 아닌 PER SHARD의 결과 수. 기본적으로 인덱스에는 5 개의 기본 샤드가 있으므로 제한을 5로 지정하면 25 개의 결과가 다시 나타날 수 있습니다. 이 같은

그래서 아마 뭔가 :

curl -XGET 'http://127.0.0.1:9200/_all/_search?pretty=1' -d ' 
{ 
    "query" : { 
     "bool" : { 
     "should" : [ 
      { 
       "filtered" : { 
        "filter" : { 
        "limit" : { 
         "value" : 1 
        } 
        }, 
        "query" : { 
        "text" : { 
         "title" : "some words" 
        } 
        } 
       } 
      }, 
      { 
       "filtered" : { 
        "filter" : { 
        "limit" : { 
         "value" : 1 
        } 
        }, 
        "query" : { 
        "text" : { 
         "title" : "other words" 
        } 
        } 
       } 
      }, 
      { 
       "filtered" : { 
        "filter" : { 
        "limit" : { 
         "value" : 1 
        } 
        }, 
        "query" : { 
        "text" : { 
         "title" : "some other words" 
        } 
        } 
       } 
      } 
     ] 
     } 
    } 
} 
' 

이 5 개 파편, 당신은 지정하지 않았기 때문에 (15 개 문서의 최대로 (각 파편에 당신에게 각 구절의 최고 점수 문서를 줄 것이다 size=15)는 상위 10 개 문서로 축소됩니다.

귀하의 문서 공유 방식에 따라 귀하의 마일리지가 다를 수 있습니다.

+0

멀티 검색 조언 주셔서 감사합니다! – Scharron

관련 문제