Heim > Java > javaLernprogramm > So lösen Sie das Problem, dass SpringBoot ES-Analyse-Suchrückgabefelder integriert

So lösen Sie das Problem, dass SpringBoot ES-Analyse-Suchrückgabefelder integriert

PHPz
Freigeben: 2023-05-16 08:13:07
nach vorne
1317 Leute haben es durchsucht

    1. Datenstruktur

    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
    }
    Nach dem Login kopieren

    2. ElasticSearch fragt alle Dokumente in allen Indizes im Cluster ab

     GET /hotel/_search
    Nach dem Login kopieren
    rrree

    3. Wie viele Millisekunden, die die Suchanfrage gedauert hat

    Der Wert 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 值告诉我们执行整个搜索请求耗费了多少毫秒。

    2. shards 查询中参与分片的总数

    _shards 部分告诉我们在查询中参与分片的总数,以及这些分片成功了多少个失败了多少个。正常情况下我们不希望分片失败,但是分片失败是可能发生的。如果我们遭遇到一种灾难级别的故障,在这个故障中丢失了相同分片的原始数据和副本,那么对这个分片将没有可用副本来对搜索请求作出响应。假若这样,Elasticsearch 将报告这个分片是失败的,但是会继续返回剩余分片的结果。

    3. timed_out 查询是否超时

    timed_out 值告诉我们查询是否超时。默认情况下,搜索请求不会超时。

    4. hits 表示搜索结果

    返回结果中最重要的部分是 hits ,它包含 total 字段来表示匹配到的文档总数,并且一个 hits

    Der Teil _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.

    3. timed_out Ob die Abfrage das Zeitlimit überschreitet

    timed_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 dar

    Der wichtigste Teil der zurückgegebenen Ergebnisse ist hits, der das Feld total enthält, um die Gesamtzahl der übereinstimmenden Dokumente darzustellen a hits enthält die ersten zehn Dokumente der Abfrageergebnisse. Beim Parsen von Suchergebnissen müssen wir normalerweise auf die folgenden Felder achten:

    hits.total.value: Die Gesamtzahl der übereinstimmenden Dokumente.

    hits.max_score: Der maximale Wert von _score des Dokuments, das der Abfrage entspricht.

    hits.hits: Liste passender Dokumente.

    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
            }
          }
        ]
      }
    }
    Nach dem Login kopieren
    @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);
    
        }
    }
    Nach dem Login kopieren
    5. Interviewfragen für ElasticSearch-Suchergebnisse

    1 Was bedeutet das Feld _score in den ElasticSearch-Suchergebnissen?

    Antwort: Das Feld _score gibt den Relevanzwert des übereinstimmenden Dokuments an. Je höher der Wert, desto höher der Übereinstimmungsgrad.

    2. Was bedeutet das Hervorhebungsfeld in den ElasticSearch-Suchergebnissen?

    Antwort: Das Hervorhebungsfeld zeigt das hervorgehobene Feld im passenden Dokument und seinen hervorgehobenen Inhalt an.

    3. Wie erhalte ich die Gesamtzahl der Dokumente in den ElasticSearch-Suchergebnissen?

    Antwort: Die Gesamtzahl der übereinstimmenden Dokumente können Sie über das Feld hits.total.value abrufen.

    4. Wie erhalte ich die Liste der passenden Dokumente in den ElasticSearch-Suchergebnissen?

    Antwort: Die Liste der passenden Dokumente erhalten Sie über das Feld hits.hits.

    5. Wie erhalte ich die Originaldaten übereinstimmender Dokumente in den ElasticSearch-Suchergebnissen?

    Antwort: Sie können die Originaldaten übereinstimmender Dokumente über das Feld hits.hits._source abrufen.

    6. Wie erhalte ich die hervorgehobenen Informationen übereinstimmender Dokumente in den ElasticSearch-Suchergebnissen?

    Antwort: Sie können die Hervorhebungsinformationen übereinstimmender Dokumente über das Feld hits.hits.highlight abrufen. 🎜🎜7. Was bedeutet das Feld _shards in den ElasticSearch-Suchergebnissen? 🎜🎜Antwort: Das Feld _shards stellt die an der Suche beteiligten Shard-Informationen dar, einschließlich der Gesamtzahl der Shards, der Anzahl erfolgreicher Shards, der Anzahl übersprungener Shards und der Anzahl fehlgeschlagener Shards. 🎜🎜8. Was bedeutet das Feld „Genommen“ in den ElasticSearch-Suchergebnissen? 🎜🎜Antwort: Das Take-Feld gibt die Suchzeit in Millisekunden an. 🎜

    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!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage