gpt4 book ai didi

java - 在Elasticsearch的Java客户端中编写查询

转载 作者:行者123 更新时间:2023-12-02 22:37:35 24 4
gpt4 key购买 nike

我使用了Elastic Search Java客户端,
我正在实现一个搜索应用程序。
(索引已建立)

我想重现Elastic Search Java客户端,以下查询。

但是,无法复制。

如果您熟悉Java客户端,
我要你告诉我。

我要执行的查询(示例字段具有Java和php)

{
    "Query": {
        "Bool": {
            "Must": [{
                "Match": {
                    "Sample": "java"
                }},
                {"Match": {
                    "Sample": "php"
                }
            }]
        }
    },
    "Size": 50
}

在Java客户端上组装查询
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery ().
        Must (QueryBuilders.matchQuery ("sample", "test")));
SearchRequestBuilder builder = client.prepareSearch ()
        .setSize (50)
        .setQuery (boolQuery);
System.out.println (builder);

↑输出“builder”变量的内容
{
  "Size": 50,
  "Query": {
    "Bool": {
      "Must": [
        {
          "Match": {
            "Sample": {
              "Query": "test",
              "Operator": "OR",
              "Prefix_length": 0,
              "Max_expansions": 50,
              "Fuzzy_transpositions": true,
              "Lenient": false,
              "Zero_terms_query": "NONE",
              "Boost": 1.0
            }
          }
        }
      ],
      "Disable_coord": false,
      "Adjust_pure_negative": true,
      "Boost": 1.0
    }
  },
  "Ext": {}
}

输出时,匹配中包括额外的属性。
而且,我仍然不知道如何匹配多个单词。

有人,请借给我你的智慧。

环境
  • 语言:Java 8
  • 框架:Spring
  • Elasticsearch客户端(jar)版本
    *组织 flex 搜索:5.1.1
    * Org.elasticsearch.client:5.1.1
  • Elasticsearch的版本:5.3.1
  • 最佳答案

    假设我有以下映射:

    {
    "articles": {
    "mappings": {
    "article": {
    "properties": {
    "sample": {
    "type": "text"
    }
    }
    }
    }
    }
    }

    我索引了以下三个文档:
    { "sample" : "java php" },
    { "sample" : "java" },
    { "sample" : "php" }

    您提供的es查询给我以下结果:
    {
    "took": 1,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
    },
    "hits": {
    "total": 1,
    "max_score": 0.51623213,
    "hits": [
    {
    "_index": "articles",
    "_type": "article",
    "_id": "AV0rSbyjpRVEWsG0iTxj",
    "_score": 0.51623213,
    "_source": {
    "sample": "java php"
    }
    }
    ]
    }
    }

    为了使用Java API获得相同的结果,我使用:
    BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
    .must(QueryBuilders.matchQuery ("sample", "java"))
    .must(QueryBuilders.matchQuery ("sample", "php"));
    SearchRequestBuilder builder = client.prepareSearch()
    .setSize(50)
    .setQuery(boolQuery);

    SearchResponse response;
    try {
    response = builder.execute().get();

    for (SearchHit hit : response.getHits().getHits()) {
    LOG.info("Result: " + hit.getSourceAsString());
    }
    } catch (InterruptedException | ExecutionException e) {
    // handle exception
    LOG.error("Exception while executing query {}", e);
    }

    结果:
    Result: { "sample" : "java php" }

    您在调试时在查询中看到的所有其他属性只是默认值,Java API会对其进行显式设置。

    关于java - 在Elasticsearch的Java客户端中编写查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44996276/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com