2013-08-23 3 views
1

나는 ElasticSearch를 사용하여 파이썬으로 mongodb를 검색하고 있습니다. 검색 결과에서 항목 ID를 제외시키기 위해 쿼리에 항목 ID 목록을 제공하고 싶습니다. , 당신은 bool 필터의/쿼리의 must_not 결과를 제외하는 데 사용해야 여기 ES 문서 도구 (http://www.elasticsearch.org/guide/reference/query-dsl/bool-query/)에서결과에서 항목 제외

flagged_articles = ["er12", "rt43"] 
query = { 

    "from": page*limit, 
    "size": limit, 
    "query": { 
     "bool": { 
      "must": { 
       "range": { 
        "added" : { 
         "from" : "2013-04-11T00:00:00" 
        } 
       } 
      }, 
      "ids" : { 
      "values" : flagged_articles 
      } 
    } 

답변

1

쿼리 대신 필터를 사용하면 더 빠를 것입니다. 필터는 점수 계산을하지 않으므로 오버 헤드가 가벼워집니다.

{ 
    "filtered" : { 
     "query" : { 
      "range": { 
       "added" : { 
        "from" : "2013-04-11T00:00:00" 
       } 
      } 
     }, 
     "filter" : { 
      "not" : { 
       "filter" : { 
        "ids" : { 
         "values" : ["123", "456", "789"] 
        } 
       }, 
       "_cache" : true 
      } 
     } 
    } 
} 

참고 : not 필터가 기본적으로 캐시되지 않습니다 (다른 필터는 일반적으로 캐시). _cache: true 매개 변수를 추가하여 이후 검색에서 필터를 사용한다고 생각하면 not 필터를 캐싱해야한다는 것을 나타냅니다.

행운을 빈다.

0

:

나는이 쿼리를 시도했지만 나는 어떤 결과를 얻을 수 없습니다. 재 작업 한 예 :

flagged_articles = ["er12", "rt43"] 

query = { 
    "from": page*limit, 
    "size": limit, 
    "query": { 
     "bool": { 
      "must": { 
       "range": { 
        "added" : { 
         "from" : "2013-04-11T00:00:00" 
        } 
       } 
      }, 
      "must_not" : { 
       "terms": { 
        "article.id" : flagged_articles 
       } 
      } 
     } 
    } 
} 

올바른 방법으로 알려야한다고 생각합니다.

수정 : 분명히 terms 필터를 넣은 곳에서 ids 필터를 사용할 수 있습니다.

관련 문제