2015-01-06 3 views
0

한 가지 경우로 하나의 쿼리에 여러 쿼리 조건을 넣어 필요한 쿼리 수를 줄여야합니다.하나의 쿼리에서 여러 쿼리를 조건에 따라 구분하고 조건에 따라 항목을 구별합니다.

그러나 조건에 따라 반품 항목을 구별해야합니다.

현재 기능 점수 쿼리를 사용하여이 목표를 달성했습니다. 구체적으로 말하자면 각 조건에 점수가 할당되어 있으며 그 점수를 기반으로 결과를 구별 할 수 있습니다.

그러나 성능이 좋지 않습니다. 이제는 각 조건의 의사 수를 알아볼 필요가 있습니다.

그래서 어떤 방법이 있습니까? 내가 집계를 사용하여 생각하고 있지만, 그것을 할 수 있는지 확실하지 않습니다.

감사합니다.

갱신 :

curl -X GET 'localhost:9200/locations/_search?fields=_id&from=0&size=1000&pretty' -d '{ 
"query":{ 
    "bool":{ 
    "should":[ 
     { 
     "filtered":{ 
      "filter":{ 
      "bool":{ 
       "must":[{"term":{"city":"new york"}},{"term":{"state":"ny"}}] 
      } 
      } 
     } 
     }, 
     { 
     "filtered":{ 
      "filter":{ 
      "bool":{ 
       "must":[{"term":{"city":"los angeles"}},{"term":{"state":"ca"}}] 
      } 
      } 
     } 
     } 
    ] 
    } 
}}' 

답변

0

그럼 당신의 질문의 첫 부분에 대답, 이름 쿼리는 최고입니다. 예를 들어 는 :

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "field1": { 
       "query": "qbox", 
       "_name": "firstQuery" 
      } 
      } 
     }, 
     { 
      "match": { 
      "field2": { 
       "query": "hosted Elasticsearch", 
       "_name": "secondQuery" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

이 해당 문서에 일치 쿼리에 대한 정보를 가지고 각 히트에 대한 추가 필드에게 전화 matched_queries를 반환합니다. 이름 쿼리에 대한 자세한 정보를 찾을 수 있습니다. here

그러나이 정보는 집계에 사용할 수 없습니다. 질문의 두 번째 부분을 별도로 처리해야합니다. 각 쿼리 유형에 대한 필터 집계가 여기의 아이디어 솔루션이됩니다. 예를 들어 :

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "text": { 
       "query": "qbox", 
       "_name": "firstQuery" 
      } 
      } 
     }, 
     { 
      "match": { 
      "source": { 
       "query": "elasticsearch", 
       "_name": "secondQuery" 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "aggs": { 
    "firstQuery": { 
     "filter": { 
     "term": { 
      "text": "qbox" 
     } 
     } 
    }, 
    "secondQuery": { 
     "filter": { 
     "term": { 
      "source": "elasticsearch" 
     } 
     } 
    } 
    } 
} 

당신은 필터 집계 here

+0

에 대한 자세한을 찾을 수는 현재 내가 부울이-해야한다 쿼리해야 상단에서 조회 할 수 있습니다. _name 태그를 넣을 위치가 확실하지 않습니다. 어떤 힌트? – milodky

+0

내가 ""_name ""넣은 것처럼 쿼리 안에 넣습니다 : "firstQuery" " –

+0

내가 사용하는 쿼리를 게시했습니다. _name을 필터 본문에 삽입하지만 작동하지 않습니다. – milodky