In Elasticsearch besteht die Standardsortierungsmethode darin, basierend auf dem Bewertungsalgorithmus (d. H. Korrelation) zu sortieren. Manchmal müssen wir jedoch die Suchergebnisse basierend auf bestimmten Geschäftsanforderungen wie Preis, Umsatz usw. sortieren.
Angenommen, wir haben einen Produktindex, der die Felder "Name" (Name) und "Price" (Preis) enthält. Wenn Sie in absteigender Preisreihenfolge sortieren möchten, können Sie den folgenden Code verwenden:
GET /PRODUKTE /_SEARCH { "Abfrage": { "match_all": {} }, "sortieren": [ { "Preis": { "Order": "Desc" } } ] }
Dieser Code gibt alle Elemente zurück und sortiert die Ergebnisse in absteigender Preisreihenfolge. Sie können das Sortierfeld entsprechend den tatsächlichen Bedürfnissen ändern.
Manchmal müssen wir nach mehreren Bedingungen sortieren, die mit Funktionskripten implementiert werden können. Angenommen, wir möchten das Rating und das Verkaufsvolumen des Produkts sortieren, wobei das Gewicht der Bewertung 0,7 und das Gewicht des Verkaufsvolumens 0,3 beträgt. Hier ist der Code, um dies zu erreichen:
Zunächst müssen wir beim Erstellen eines Index Bewertungs- und Umsatzfelder hinzufügen:
Put /Produkte { "Mappings": { "Eigenschaften": { "Name": { "Typ": "Text" }, "Bewertung": { "Typ": "Float" }, "Verkäufe": { "Typ": "Integer" } } } }
Verwenden Sie als Nächstes ein Funktionskript, um die Zusammenfassung zu definieren:
GET /PRODUKTE /_SEARCH { "Abfrage": { "match_all": {} }, "sortieren": [ { "_Script": {{ "Typ": "Nummer", "Skript": { "Quelle": "(0,7 * doc ['Rating']. Wert) + (0,3 * doc ['Umsatz']. Wert)" }, "Order": "Desc" } } ] }
Dieser Code sortiert die Suchergebnisse basierend auf dem gewichteten Durchschnitt von Bewertungen und Umsätzen. Sie können den Gewichtswert und die Berechnungsmethode entsprechend den spezifischen Anforderungen einstellen.
Elasticsearch bietet eine Vielzahl von Mapping -Typen und -einstellungen, mit denen wir die Art der Suchergebnisse optimieren können. Insbesondere sind die folgenden Optionen sehr nützlich bei der Sortierung:
Zum Beispiel möchten wir nach dem Alter des Benutzers sortieren. Zunächst müssen wir beim Erstellen eines Index die Feldkarte festlegen:
Put /Benutzer { "Mappings": { "Eigenschaften": { "Name": { "Typ": "Text" }, "Alter": { "Typ": "Keyword", "Index": "Not_analyzed", "FieldData": Richtig } } } }
Sortieren Sie als Nächstes sortieren Sie mit dem folgenden Code aufsteigender Reihenfolge:
Get /Benutzer /_SEARCH { "Abfrage": { "match_all": {} }, "sortieren": [ { "Alter": { "Reihenfolge": "ASC" } } ] }
Dieser Code wird nach dem Alter des Benutzers sortiert.
Durch die Verwendung der Sortierung des Gewichtswerts, der Definition komplexer Sortierregeln und der Optimierung von Feldzuordnungen und Einstellungen können wir die Effizienz und Genauigkeit der Sortierung von Suchergebnissen in Elasticsearch erheblich verbessern. Abhängig von unterschiedlichen Geschäftsanforderungen können Sie diese Optimierungsmethoden flexibel anpassen, um ein besseres Sucherlebnis zu erzielen.