当前位置: 首页 > 知识库问答 >
问题:

在spring数据弹性搜索中,什么是等效的PercolateQueryBuilder?

巫新知
2023-03-14

底线——如何将我的简单percolator查询转换为spring数据弹性搜索?任何线索都很感激。谢谢

我一直在尝试使用spring data elastic search编写下面的percolate查询

"query": {
    "percolate": {
      "field": "query",
      "document": {
        "message": "A new bonsai tree in the office"
      }
    }
  }

我试过了

Criteria criteria = new Criteria("query").is(

            new Criteria("percolate")
                                .is(
                                        new Criteria("field").is("query")
                                                .and("document")
                                                .is(new Criteria("message").is(text))
                                )
    );

试过

Query query = new StringQuery(String.format("{\n" +
                "  \"query\": {\n" +
                "    \"percolate\": {\n" +
                "      \"field\": \"query\",\n" +
                "      \"document\": {\n" +
                "        \"message\": \"%s\"\n" +
                "      }\n" +
                "    }\n" +
                "  }\n" +
                "}",text));

还尝试了NativeSearchQuery,但都没有成功。

我懂了https://tothepoint.group/matching-documents-with-elasticsearch-percolator-query/作者使用PercolateQueryBuilder的地方(https://github.com/ophalsp/elasticsearch-percolator)但我没有在spring data elastic search中看到PercolateQueryBuilder。

编辑:-我尝试了所有实现QueryBuilder的生成器。因为他们都没有在XContentBuilder生成器中进行查询或渗透(如下所示),所以他们不工作

protected void doXContent(XContentBuilder builder, Params params) throws IOException {
        builder.startObject("query");

我还可以看到,PercolateQueryBuilder是percolator-客户端的一部分,这是org.elasticsearch.client.transport的一部分,在Spring启动中被排除在外

<dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-elasticsearch</artifactId>
      <version>4.2.1</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <artifactId>transport</artifactId>
          <groupId>org.elasticsearch.client</groupId>
        </exclusion>
      </exclusions>
    </dependency>

我将添加org。弹性搜索。客户运输并试一试。

共有1个答案

穆宾白
2023-03-14

以我的成功回答了我自己的问题。可能会帮助别人。

添加以下依赖项后

<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>7.12.1</version>
        </dependency>

通过下面的代码,我可以在Percolator上运行查询。我不知道为什么Spring Boot删除了上述依赖项。到目前为止,我还没有遇到任何问题。如果我因为上述依赖项而面临问题,我会在这里更新。

public Query buildLookUpQuery(String text){
        XContentBuilder docBuilder = null;
        try {
            docBuilder = XContentFactory.jsonBuilder().startObject();
            docBuilder.field("message", text);
            docBuilder.endObject();
        } catch (IOException ioException) {
            log.error("Unable to build a query ", ioException.getMessage());
        }
        PercolateQueryBuilder percolateQuery = new PercolateQueryBuilder(QUERY,
                BytesReference.bytes(docBuilder),
                XContentType.JSON);
        return new NativeSearchQueryBuilder()
                .withQuery(percolateQuery)
                .build();
    }
 类似资料:
  • 它们在ES术语表中没有提及。 它们与其他ES实体(碎片/节点/索引)的关系是什么?

  • 升级到Spring boot 2.3和Spring data elasticsearch 4.0.9后的问题。我有这样的文档: 这在spring data 3.0中与Jackson配合得很好,但升级到4.0后,Jackson不再可用,现在我收到了一个来自spring的实例化异常,无法实例化URL对象。 例外情况: 任何关于解决方案的想法都将受到赞赏。

  • 我有一个Spring Boot应用程序,我想在其中单独使用弹性搜索2.2.0(而不是嵌入式服务器),我想使用Spring Data弹性搜索,那么Spring Data支持的弹性搜索版本是什么,我如何配置它以连接到运行在localhost:9200中的弹性搜索实例? 实际上,我尝试在application.properties文件中添加以下选项: 后来,我创建了这个配置类: 我得到了这个StackT

  • 我有一个设计糟糕的文档结构: 我想从上面的文档中检索标题、Fach和代码。 多谢了。

  • 我正在使用spring数据elasticsearch来执行CRUD操作。 我有一个扩展Elasticsearch chRepository的自定义存储库。 最终,ElasticsearchRepository扩展了CrudRepository,这意味着可以更新现有记录。 问题是,你是如何做到这一点的?我还没有找到一个名为“update()”的方法 我认为做以下事情会有用(代码从https://gi

  • 我需要运行以下查询: 但我不能用spring data elasticsearch轻松运行这个。 有什么办法吗 spring data elasticsearch是否很好地支持所有elasticsearch查询DSL