代码之家  ›  专栏  ›  技术社区  ›  Hari Rao

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

  •  0
  • Hari Rao  · 技术社区  · 5 年前

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

    "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

    我尝试了所有实现QueryBuilder的构建器。因为他们都没有

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

    我还可以看到PercolateQueryBuilder是percolator客户端的一部分,它是org.elasticsearch.client.transport的一部分,在spring boot中被排除在外

    <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.elasticsearch.client.transport并试一试。

    0 回复  |  直到 5 年前
        1
  •  0
  •   Hari Rao    5 年前

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

    添加以下依赖项后

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

    我不知道为什么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();
        }