2016-07-06 124 views
0

我试图在elasticsearch中使用queryDSL创建一个MINUS查询,如Mysql(DATASET1-DATASET2),但找不到方法。如何在elasticsearch中执行MINUS操作

任何人都可以告诉我方式吗? Tx提前

+0

也许你可以通过[bool query]完成这个操作(https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html) – yuan

+0

Hi @M_M if答案已经解决了你的问题,请考虑接受它。这向更广泛的社区表明您已找到解决方案。但是没有义务这样做。 – baudsp

回答

1

您可以使用必须和必须不使用bool查询。
Documentation on the bool query

你会把查询dataSet1的在必和must_not的查询DATASET2:

{ 
"bool" : { 
    "must" : { 
     DATASET1 
    } 
    "must_not" : { 
     DATASET2 
    } 
} 

}

例如:

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": { 
      "range": { 
       "@timestamp": { 
       "lte": 1467811620000, 
       "gte": 1467811520000 
       } 
      } 
      }, 
      "must_not": { 
      "term": { 
       "_type": "bus-api" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

这将返回这两次之间的所有文件,不包括bus-api类型的文件。