当前位置: 首页 > 面试题库 >

如何通过JSON将查询设置为Elasticsearch SearchRequest?

裴心水
2023-03-14
问题内容

elasticsearch :6.1.2

我有一个通过JSON进行的输入查询,并且想使用高级Java
API
使用该查询数据来构建搜索请求

String jsonQuery = "..."
SearchRequest searchRequest = new SearchRequest()
SearchSourceBuilder builder = ?
searchRequest.source(builder);

我试图通过以下方式构造构建器:

SearchSourceBuilder.fromXContent(XContentType.JSON.xContent().createParser(NamedXContentRegistry.EMPTY, query));

但这会产生:

由以下原因引起:org.elasticsearch.ElasticsearchException:org.elasticsearch.common.xcontent.NamedXContentRegistry.parseNamedObject(NamedXContentRegistry.java:129)〜[elasticsearch-6.1.2.jar:6.1.2]处的解析器不支持namedObject
org.elasticsearch.index.query.AbstractQueryBuilder.parseInnerQueryBuilder(AbstractQueryBuilder.java)上的org.elasticsearch.common.xcontent.support.AbstractXContentParser.namedObject(AbstractXContentParser.java:402)〜[elasticsearch-6.1.2.jar:6.1.2]
:313)〜[elasticsearch-6.1.2.jar:6.1.2],位于org.elasticsearch.search.builder.SearchSourceBuilder.parseXContent(SearchSourceBuilder.java:1003)〜[elasticsearch-6.1.2.jar:6.1.2]在org.elasticsearch.search.builder.SearchSourceBuilder.fromXContent(SearchSourceBuilder.java:115)〜[elasticsearch-6.1.2.jar:6.1.2]


问题答案:

我现在以这种方式生成SearchSourceBuilder:

String query = "..."
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
SearchModule searchModule = new SearchModule(Settings.EMPTY, false, Collections.emptyList());
try (XContentParser parser = XContentFactory.xContent(XContentType.JSON).createParser(new NamedXContentRegistry(searchModule
            .getNamedXContents()), query)) {
    searchSourceBuilder.parseXContent(parser);
}


 类似资料:
  • 我找到了关于“按查询更新”请求的文档 https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-update-by-query.html 问题是:如何将URL参数添加到“_update_by_query”查询: 我补充的例子是: 生产前/按查询更新?切片=200 如何使用GN JAVA Api添加

  • 问题内容: 给出以下HQL查询: 我使用Query对象的方法进行设置。 我想使用对象进行设置,但是在查看Hibernate文档和方法列表时,我看不出要使用哪种明显的选择。有任何想法吗? 问题答案: 使用,的Javadoc在这里。 有四种变体可供选择。

  • 问题内容: 嗨,我有一个命名查询 我想这样设置限制: 但这在服务器启动时显示错误。我正在使用以下代码在DAO类中调用查询: 需要设置开始和结束参数。请帮忙。 问题答案: 正如@DataNucleus所说,LIMIT在JPQL中不是有效的关键字。这不是指定要返回多少行的方法。这是您的操作方式: 这将是调用命名查询的代码:

  • 问题内容: 我有一个实体: 我在说。这是我的DAO方法: 日志说: 请求处理失败;嵌套的异常是java.lang.NullPointerException 并将指针放在这一行: 有时必须为null。那么如何设置null? 问题答案: 如果您查看Query类的文档,setInteger()方法, 它以名称和 原始类型int 作为参数。 当您在 自动装箱 期间传递值为null的包装器类型Integer

  • 问题内容: 我的慢查询日志中充满了如下条目: 我猜该命令是通过复制发出的,但我不知道该如何花费一秒钟。有关如何解决此问题的任何想法? 问题答案: 是MySQL中的数据类型和内置函数。您想通过以下语句实现什么? UPD :很抱歉,我不知道所使用的MySQL hacks。 看来这是从慢速日志中排除某些查询的解决方案。 OP正在使用Microslow补丁来增强慢查询日志中的统计信息,并且该语句在Inno

  • 问题内容: 这是我的PostgreSQL函数: 它有一个参数,我想通过JPQL 将Java传递给它: 上面的代码失败,但例外: 所以我不确定如何从EclipseLink调用我的函数。 问题答案: 通过将String []类型的Java数组传递给您进行测试,以进行测试。似乎PgJDBC不接受Java数组作为带有或不带有参数的参数。 合规 JDBC规范 16.5“数组对象” 建议JDBC 部分存在,因