过滤的API在elasticsearch中已弃用

时间:2015-03-12 05:52:04

标签: java elasticsearch

我使用java API来实现以下输入,但在JAVA API / Elastic 1.4中不推荐使用FilterBuilders.filtered Deprecated warning showing up

filtered: {
    filters: {
        term: {
            "id": 5
        }
    },
    filters{
        {
            term: {
                "city": "newyork"
            }
        }
    }

我的目标是想要实现类似于MySQL中的WHERE条件

WHERE id=1 and city="newyork" 

在输出中,我想要点击列表而不想要单独的存储桶。我是elasticsearch和API的新手。

如何实现以前过滤(已弃用)的功能?

2 个答案:

答案 0 :(得分:1)

弹性1.4中的JAVA API也支持

过滤器。 Please check JAVA API query DSL Document

查询DSL

{
 "query": {
     "filtered": {
        "filter": {
            "and": {
               "filters": [
                  {
                      "term": {
                         "id": 5
                      }
                  },
                  {
                      "term": {
                         "city": "newyork"
                      }
                  }
               ]
            }
        }
     }
 }
}

JAVA API

FilterBuilders.andFilter(
    FilterBuilders.termFilter("id", 5),
    FilterBuilders.termFilter("city", "newyork")
    );

答案 1 :(得分:1)

现在为时已晚,但也许可以帮助别人。 filtered查询将替换为Elasticsearch 2.0版中的bool查询。见Elasticsearch reference

在Java中,您可以使用以下内容: -

FilterBuilders.boolFilter()
                .must(FilterBuilders.queryFilter(QueryBuilders.matchAllQuery()))
                .filter(FilterBuilders.boolFilter()
                        .must(FilterBuilders.termFilter("id", 5))
                        .must(FilterBuilders.termFilter("city", "newyourk"))
                );