有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Elasticsearch:按源id获取文档\u id

我最近开始使用ElasticSearch,但无法使用sourceid(26.0)获取文档\u id(E2EZ4NYBAATUNWZCSDSL9)

例如:

查询

GET /_search?index=xyz
{
  "_source": ["firstName", "lastName", "id", "email"]
}

下面是我的弹性搜索查询结果:

{
  "took" : 431,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 98,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "xyz",
        "_type" : "_doc",
        "_id" : "E2EZ4nYBaAtUNwzCDsL9",
        "_score" : 1.0,
        "_source" : {
          "lastName" : "mehta",
          "firstName" : "zenny",
          "id" : 26.0,
          "email" : "zmehta@gmail.com"
        }
      }
    ]
  }
}

下面我附上了从源id字段获取\u id的代码

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

    QueryBuilder matchSpecificFieldQuery = QueryBuilders.multiMatchQuery(id, "id");
    sourceBuilder.query(matchSpecificFieldQuery);
    sourceBuilder.from(0);
    sourceBuilder.size(5);
    sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); // how long the search is allowed to take

    SearchRequest searchRequest = new SearchRequest();

    String[] includes = new String[] { "id" };

    String[] excludes = Strings.EMPTY_ARRAY;
    sourceBuilder.fetchSource(includes, excludes);
    searchRequest.indices(INDEX_TYPE);
    searchRequest.source(sourceBuilder);

    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

    String docId = searchResponse.getHits().getHits()[0].getId();

    DeleteRequest deleteRequest = new DeleteRequest(INDEX_TYPE, docId);

但似乎什么都不管用

目前,我只有id字段值,但对于删除请求,我需要使用源id获取_id。如何在ElasticSearch中通过_id删除记录


共 (1) 个答案

  1. # 1 楼答案

    您应该像这样通过deleteRequest调用客户端

    DeleteRequest deleteRequest = new DeleteRequest(INDEX_TYPE, docId);
    
    DeleteResponse deleteResponse = client.delete(deleteRequest,questOptions.DEFAULT);
    
    if (deleteResponse.getResult() == DocWriteResponse.Result.NOT_FOUND) {
       // Do something if the document to be deleted was not found
     }