elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

java中如何在Elasticsearch索引文档中插入唯一数据

java中如何在Elasticsearch索引文档中插入唯一数据,java,elasticsearch,Java,elasticsearch,这是我先前的问题- 索引映射如下所示 { "test" : { "mappings" : { "properties" : { "name" : { "type" : "keyword" }, "info" : { "type" :

这是我先前的问题-

索引映射如下所示

{
 "test" : {
   "mappings" : {
     "properties" : {
        "name" : {
          "type" : "keyword"
        },
        "info" : {
          "type" : "nested"
        },
        "joining" : {
           "type" : "date"
        }
    }
}
在将数据上载到索引之前,如何检查字段的数据是否已存在

注意:-我没有在索引中维护id字段。需要检查每个文档中的名称,如果它已经存在,则不要将文档插入索引


提前感谢

因为您的映射中没有
id
字段,您必须搜索
name
字段,您可以使用下面的代码来搜索它

public List<SearchResult> search(String searchTerm) throws IOException {
        SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        MatchQueryBuilder multiMatchQueryBuilder = new 
        MatchQueryBuilder(searchTerm, "firstName");
        searchSourceBuilder.query(matchQueryBuilder);
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = esclient.search(searchRequest, RequestOptions.DEFAULT);
        return getSearchResults(searchResponse);

    }

类SearchResult来自哪个包?@Jenny是我自己的类,它解析Elasticsearch的SearchResponse类中的字段,因此在您的情况下,您可以使用定义索引的POJOES@Jenny谢谢你给我的答案打分,如果你也能投票给我,那就太好了
private List<yourpojo> getSearchResults(SearchResponse searchResponse) {
        RestStatus status = searchResponse.status();
        TimeValue took = searchResponse.getTook();
        Boolean terminatedEarly = searchResponse.isTerminatedEarly();
        boolean timedOut = searchResponse.isTimedOut();

        // Start fetching the documents matching the search results.
        //https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search
        // .html#java-rest-high-search-response-search-hits
        SearchHits hits = searchResponse.getHits();
        SearchHit[] searchHits = hits.getHits();
        List<sr> sr = new ArrayList<>();
        for (SearchHit hit : searchHits) {
            // do something with the SearchHit
            String index = hit.getIndex();
            String id = hit.getId();
            float score = hit.getScore();

            //String sourceAsString = hit.getSourceAsString();
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            String firstName = (String) sourceAsMap.get("firstName");
            
            sr.add(userSearchResultBuilder.build());
        }