2017-03-27 4 views
1

私はelasticsearch(Pythonライブラリーを使用して)を照会したいので、文書の一部をフィルターに掛けたいと思います。私は唯一のフィルタを使用して、キーワードはならないよスコアを持っている必要はありませんので:または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のバージョンでも動作するかどうかを確認できます。

関連する問題