【问题标题】:Elasticsearch 5.x setQuery deprecatedElasticsearch 5.x setQuery 已弃用
【发布时间】:2016-11-17 11:09:52
【问题描述】:

我有一个关于 Elasticsearch 最新版本的问题。

在以前的版本之前,我使用以下 JAVA API 搜索:

SearchRequestBuilder request = client.prepareSearch(index).setSource(jsonQuery)

现在不推荐使用 setSource,建议改用 setQuery(QueryBuilder)。

我的问题如下,是否可以像以前一样传递整个json查询?

在此致谢

[编辑]

这是我使用的查询语法,如果可能,我想保留:

"{"
+ "\"query\": {"
+ "    \"bool\": {"
+ "      \"filter\": { ... }"
+ "     }"
+ "  },"
+ "  \"fields\": ["
+ "    \"xxx\","
+ "  ],"
+ "  \"size\": 1000"
+ "}";

我不想使用以下方法拆分正文、字段和大小:

setQuery(QueryBuilders.wrapperQuery(jsonQuery)).setSize(size).storedFields(fields)

【问题讨论】:

    标签: elasticsearch elasticsearch-java-api elasticsearch-5


    【解决方案1】:

    是的,您可以使用QueryBuilders.wrapperQuery() 来创建WrapperQueryBuilder 的实例以实现此目的:

    SearchRequestBuilder request = client.prepareSearch(index)
        .setQuery(QueryBuilders.wrapperQuery(jsonQuery))
        .setSize(1000)
        .fields("xxx1", "xxx2");
    

    【讨论】:

    • 感谢您的回答 Val。我已经尝试过这种实现,但是由于我正在定义正文,因此我无法包含来自 jsonQuery 的存储字段。
    • 不太明白,能否详细说明?使用您之前执行的查询更新您的问题以及此解决方案无法解决的问题。
    • 请更新您的问题并格式化您的代码,它会更清晰,更容易为您提供帮助。
    • 确实,您需要直接在请求对象上以不同方式指定fieldssize
    • 我希望还有一种方法可以从字符串声明所有查询。不管怎样,谢谢你的帮助
    猜你喜欢
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2020-03-03
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多