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