2017-03-27 1 views
1

내 elasticsearch (파이썬 라이브러리 사용)를 쿼리하고 싶고 문서 일부를 필터링하고 싶습니다. 나는 단지 필터를 사용하고 점수를 갖고 싶어하지 않고 키워드되지해야하기 때문에이 내가 수행 한 쿼리가또는 Elasticsearch 필터

{ 
     "_source": ["entities"], 
     "query": { 
      "bool": { 
       "must_not": [ 
        {"exists": {"field": "retweeted_status"}} 
       ], 
       "filter": [ 
        {"match": {"entities.urls.display_url": "blabla.com"}}, 
        {"match": {"entities.urls.display_url": "blibli.com"}}] 
      } 
     } 
    } 

그러나 문제는 같은 필터는 분명히 AND 작업 점이다 그 효과가있다. 나는 그것이 OR이되고 싶습니다. 나는 "blibli.com"OR "blabla.com"가 포함 된 모든 문서를 내 쿼리를 변경할 수있는 방법

+0

'필터'대신 ['should'] (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html)를 시도해보고 원하는 것을 얻으십시오. 결과. – Pit

+0

@Pit은 쿼리에서 득점을 의미하며 속도를 늦추고 싶지 않습니다. – mel

답변

2

당신은 다른 bool 내부 둥지 bool 그래서 당신은 다음과 같이 쿼리를 작성할 수 있습니다 :

{ 
    "query": { 
    "bool": { 
     "must_not": [ 
     { 
      "exists": { 
      "field": "retweeted_status" 
      } 
     } 
     ], 
     "filter": [ 
     { 
      "bool": { 
      "should": [ 
       { 
       "match": { 
        "entities.urls.display_url": "blabla.com" 
       } 
       }, 
       { 
       "match": { 
        "entities.urls.display_url": "blibli.com" 
       } 
       } 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 

ES 5.3에서 테스트 한 결과 Explain API을 사용하여 Elasticsearch 버전에서도 작동하는지 확인할 수 있습니다.

관련 문제