2013-08-23 60 views
1

我正在使用ElasticSearch以python搜索mongodb。我想給查詢一個項目id的列表,以便將它們從搜索結果中排除。從結果中排除項目

我試着用此查詢,但我沒有得到任何結果:

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

從ES文檔這裏(http://www.elasticsearch.org/guide/reference/query-dsl/bool-query/),你應該使用bool濾鏡/查詢的must_not排除結果。返工的例子:

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 
       } 
      } 
     } 
    } 
} 

未經測試,但應該指出你在正確的方向,我認爲。

編輯:澄清,你可以明顯地使用ids過濾器,我已經把terms過濾器。