2017-02-13 132 views
0

我正在使用elasticsearch 1.5.2。我存储了一些名为“过敏”字段的产品,还有一些没有此字段的产品。这个领域的价值可以是鱼或牛奶或坚果等。我想做一个查询,并得到结果只有产品没有在所有这个领域称为“过敏”,并将其整合到另一个聚合查询。我只想做一个查询:首先消除具有“过敏”字段的产品,然后执行第二个块的聚合查询。Elasticsearch筛选器查询

如何整合这一点:

{ 
    "constant_score" : { 
     "filter" : { 
      "missing" : { "field" : "allergic" } 
     } 
    } 
} 

到这个集合的查询:

POST tes1/_search?search_type=count 
{ 
    "aggs" : { 
     "fruits" : { 
      "filter" : { 
       "query":{ 
       "query_string": { 
        "query": "Fruits", 
        "fields": [ 
         "category" 
        ] 
       } 
      }}, 
      "aggs" : { 
       "minprice": { 
        "top_hits": { 
         "sort": [ 
          { 
           "prix en €/kg": { 
            "order": "asc" 
           } 
          } 
         ], "size":400 
        } 
       } 
      } 
    }} } 

回答

0

你需要聚集调用之前添加的查询部分。这将过滤结果,然后在结果集上运行聚合。

POST tes1/_search 
{ 
    "_source": false, 
    "size": 1000, 
     "query": 
      { "constant_score" : { 
        "filter" : { 
         "missing" : { "field" : "allergic" } 
        } 
       } 
      }, 
    "aggs" : { 
     "fruits" : { 
      "filter" : { 
       "query":{ 
       "query_string": { 
        "query": "Fruits", 
        "fields": [ 
         "category" 
        ] 
       } 
      }}, 
      "aggs" : { 
       "minprice": { 
        "top_hits": { 
         "sort": [ 
          { 
           "prix en €/kg": { 
            "order": "asc" 
           } 
          } 
         ], "size":400 
        } 
       } 
      } 
    }} } 

在附注中,请考虑将ElasticSearch升级到最新版本,因为1.x不再受支持。

+0

你能否在其他时间阅读这个问题?我编辑它来添加打印的查询。谢谢。 –

+0

顺便说一句,我把试过这样: POST TEST1/_search { “constant_score”:{ “过滤器”:{ “失踪”:{ “场”: “过敏”} } } } 和我有一个错误 –

+0

修改我的答案。请尝试执行上述查询。 – NutcaseDeveloper