Index 2 Dokumente in den Hotelindex:
PUT /hotel/_doc/1 { "title": "文雅酒店", "city": "青岛", "price": 556, "create_time": "20200418120000", "amenities": "浴池,普通停车场/充电停车场", "full_room": false, "location": { "lat": 36.083078, "lon": 120.37566 }, "praise": 10 } PUT /hotel/_doc/2 { "title": "金都嘉怡假日酒店", "city": "北京", "price": 337, "create_time": "20210315200000", "amenities": "wifi,充电停车场/可升降停车场", "full_room": false, "location": { "lat": 39.915153, "lon": 116.403 }, "praise": 60 } PUT /hotel/_doc/1 { "title": "文雅酒店", "city": "青岛", "price": 556, "create_time": "20200418120000", "amenities": "浴池,普通停车场/充电停车场", "full_room": false, "location": { "lat": 36.083078, "lon": 120.37566 }, "praise": 10 } PUT /hotel/_doc/2 { "title": "金都嘉怡假日酒店", "city": "北京", "price": 337, "create_time": "20210315200000", "amenities": "wifi,充电停车场/可升降停车场", "full_room": false, "location": { "lat": 39.915153, "lon": 116.403 }, "praise": 60 }
GET /hotel/_search
took
sagt uns, wie viele Millisekunden es gedauert hat, die gesamte Suchanfrage auszuführen. 2. Shards Die Gesamtzahl der an der Abfrage beteiligten Shards took
值告诉我们执行整个搜索请求耗费了多少毫秒。
_shards
部分告诉我们在查询中参与分片的总数,以及这些分片成功了多少个失败了多少个。正常情况下我们不希望分片失败,但是分片失败是可能发生的。如果我们遭遇到一种灾难级别的故障,在这个故障中丢失了相同分片的原始数据和副本,那么对这个分片将没有可用副本来对搜索请求作出响应。假若这样,Elasticsearch 将报告这个分片是失败的,但是会继续返回剩余分片的结果。
timed_out
值告诉我们查询是否超时。默认情况下,搜索请求不会超时。
返回结果中最重要的部分是 hits
,它包含 total
字段来表示匹配到的文档总数,并且一个 hits
_shards
gibt an, wie viele Shards an der Abfrage teilgenommen haben und wie viele dieser Shards erfolgreich waren und wie viele fehlgeschlagen sind. Normalerweise möchten wir nicht, dass das Sharding fehlschlägt, aber es kann zu einem Sharding-Fehler kommen. Wenn es zu einem katastrophalen Ausfall kommt, bei dem Originaldaten und Replikate desselben Shards verloren gehen, stehen keine Replikate dieses Shards zur Verfügung, um auf Suchanfragen zu reagieren. Wenn dies der Fall ist, meldet Elasticsearch diesen Shard als fehlgeschlagen, gibt jedoch weiterhin Ergebnisse für die verbleibenden Shards zurück. hits.total.value: Die Gesamtzahl der übereinstimmenden Dokumente.3. timed_out Ob die Abfrage das Zeitlimit überschreitet
Der wichtigste Teil der zurückgegebenen Ergebnisse isttimed_out
Der Wert sagt uns, ob die Abfrage das Zeitlimit überschreitet. Standardmäßig kommt es bei Suchanfragen nicht zu einer Zeitüberschreitung.
4. Treffer stellen Suchergebnisse darhits
, der das Feldtotal
enthält, um die Gesamtzahl der übereinstimmenden Dokumente darzustellen ahits
enthält die ersten zehn Dokumente der Abfrageergebnisse. Beim Parsen von Suchergebnissen müssen wir normalerweise auf die folgenden Felder achten:
hits.hits._source: Die Rohdaten des übereinstimmenden Dokuments.
hits.hits._score: Punktzahl übereinstimmender Dokumente. Es misst, wie gut das Dokument mit der Abfrage übereinstimmt. Standardmäßig werden die relevantesten Dokumentergebnisse zuerst zurückgegeben, d. h. die zurückgegebenen Dokumente werden in absteigender Reihenfolge nach Bewertung sortiert.hits.hits.highlight: Informationen zu passenden Dokumenten hervorheben.
4. SpringBoot integriert ElasticSearch, um Suchergebnisse zu erhalten{ "took" : 499, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "hotel", "_type" : "_doc", "_id" : "2", "_score" : 1.0, "_source" : { "title" : "金都嘉怡假日酒店", "city" : "北京", "price" : 337, "create_time" : "20210315200000", "amenities" : "wifi,充电停车场/可升降停车场", "full_room" : false, "location" : { "lat" : 39.915153, "lon" : 116.403 }, "praise" : 60 } }, { "_index" : "hotel", "_type" : "_doc", "_id" : "1", "_score" : 1.0, "_source" : { "title" : "文雅酒店", "city" : "青岛", "price" : 556, "create_time" : "20200418120000", "amenities" : "浴池,普通停车场/充电停车场", "full_room" : false, "location" : { "lat" : 36.083078, "lon" : 120.37566 }, "praise" : 10 } } ] } }
@Slf4j @Service public class ElasticSearchImpl { @Autowired private RestHighLevelClient restHighLevelClient; public void searchUser() throws IOException { SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); SearchRequest searchRequest = new SearchRequest(new String[]{"hotel"},searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); TimeValue took = searchResponse.getTook(); System.out.println("took = " + took); // 搜索结果 SearchHits searchHits = searchResponse.getHits(); // hits.total.value:匹配的文档总数 TotalHits totalHits = searchHits.getTotalHits(); long value = totalHits.value; System.out.println("value = " + value); // hits.max_score:与查询所匹配文档的_score的最大值 float maxScore = searchHits.getMaxScore(); System.out.println("maxScore = " + maxScore); // hits.hits:匹配的文档列表 SearchHit[] hits = searchHits.getHits(); for (SearchHit hit : hits) { // hits.hits._source:匹配的文档的原始数据 String sourceAsString = hit.getSourceAsString(); System.out.println("sourceAsString = " + sourceAsString); // hits.hits._id:匹配的文档的id String id = hit.getId(); System.out.println("id = " + id); Map<String, DocumentField> fields = hit.getFields(); System.out.println("fields = " + fields); String index = hit.getIndex(); System.out.println("index = " + index); float score = hit.getScore(); System.out.println("score = " + score); } System.out.println(searchResponse); } } @Slf4j @Service public class ElasticSearchImpl { @Autowired private RestHighLevelClient restHighLevelClient; public void searchUser() throws IOException { SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); SearchRequest searchRequest = new SearchRequest(new String[]{"hotel"},searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); TimeValue took = searchResponse.getTook(); System.out.println("took = " + took); // 搜索结果 SearchHits searchHits = searchResponse.getHits(); // hits.total.value:匹配的文档总数 TotalHits totalHits = searchHits.getTotalHits(); long value = totalHits.value; System.out.println("value = " + value); // hits.max_score:与查询所匹配文档的_score的最大值 float maxScore = searchHits.getMaxScore(); System.out.println("maxScore = " + maxScore); // hits.hits:匹配的文档列表 SearchHit[] hits = searchHits.getHits(); for (SearchHit hit : hits) { // hits.hits._source:匹配的文档的原始数据 String sourceAsString = hit.getSourceAsString(); System.out.println("sourceAsString = " + sourceAsString); // hits.hits._id:匹配的文档的id String id = hit.getId(); System.out.println("id = " + id); Map<String, DocumentField> fields = hit.getFields(); System.out.println("fields = " + fields); String index = hit.getIndex(); System.out.println("index = " + index); float score = hit.getScore(); System.out.println("score = " + score); } System.out.println(searchResponse); } }
Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass SpringBoot ES-Analyse-Suchrückgabefelder integriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!