繁体   English   中英

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

[英]how to insert unique data in Elasticsearch index document in java

这是我之前的问题 -如何在弹性搜索索引中插入数据

索引映射如下

{
 "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);

    }

请注意,由于您有keyword字段而不是match您可以使用termquerybuilder

并且使用utility方法解析ES的searchResponse ,代码如下:

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());
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM