Heim > Backend-Entwicklung > Golang > Verwenden Sie Elasticsearch in der Go-Sprache, um eine effiziente Suche zu erreichen

Verwenden Sie Elasticsearch in der Go-Sprache, um eine effiziente Suche zu erreichen

王林
Freigeben: 2023-06-15 21:01:40
Original
2049 Leute haben es durchsucht

Mit dem Aufkommen des Big-Data-Zeitalters sind die Speicherung und der Abruf von Daten zu einem wichtigen Thema geworden, mit dem wir konfrontiert sind. Elasticsearch ist eine verteilte Open-Source-Such- und Analyse-Engine, die durch schnelle Rückwärtsindizierung große Datenmengen durchsuchen kann und eine effiziente Volltextsuche, aggregierte Analyse, Echtzeitüberwachung, automatische Vervollständigung und Datenvisualisierung bietet Praxis, Es hat ein breites Anwendungsspektrum in Anwendungsszenarien. Gleichzeitig wird die Go-Sprache als schnelle, statisch typisierte Programmiersprache auch häufig in der Back-End-Dienstentwicklung verwendet. In diesem Artikel stellen wir vor, wie Sie Elasticsearch in der Go-Sprache verwenden, um effiziente Suchfunktionen zu implementieren.

1. Elasticsearch- und Go-Bibliotheken installieren
Zunächst müssen wir Elasticsearch und die entsprechenden Go-Bibliotheken installieren, um die Go-Unterstützung für den Elasticsearch-Client zu implementieren. Für die Installation von Elasticsearch können Sie auf der offiziellen Website von Elasticsearch (https://www.elastic.co/downloads/elasticsearch) die entsprechende Version des Installationspakets herunterladen und entsprechend dem Betriebssystem und der Installationsmethode installieren .

Als nächstes müssen wir die Elasticsearch-Clientbibliothek zur Go-Umgebung hinzufügen. In Go gibt es viele Bibliotheken von Drittanbietern, die unsere Programmierentwicklung mithilfe des Elasticsearch-Clients unterstützen. Unter ihnen sind die gängigsten Bibliotheken:

  1. Elastic (Dokumentadresse: https://godoc.org/gopkg.in/olivere/elastic.v5)
  2. go-elasticsearch (Dokumentadresse: https://github. com /elastic/go-elasticsearch)
  3. golang-elasticsearch (Dokumentadresse: https://github.com/elastic/go-elasticsearch)

Hier wählen wir Elastic. In Go können Sie den folgenden Befehl verwenden, um die Elasticsearch-Clientbibliothek zu installieren:

go get -u gopkg.in/olivere/elastic.v5

2. Mit Elasticsearch verbinden
Um eine Verbindung mit Elasticsearch herzustellen, müssen Sie die IP angeben und Portnummer des Elasticsearch-Servers. Standardmäßig ist die Portnummer von Elasticsearch 9200. Sie können eine Verbindung über die folgenden Methoden herstellen:

client, err := elastic.NewClient(

elastic.SetURL("http://127.0.0.1:9200"),
elastic.SetSniff(false),
Nach dem Login kopieren

)
if err != nil {

// do something...
Nach dem Login kopieren
Nach dem Login kopieren

}

Erstellen eines Elasticsearch-Clients Während des Terminals können Sie auch einige benutzerdefinierte Einstellungen vornehmen, wie zum Beispiel den folgenden Code:

client, err := elastic.NewClient(

elastic.SetURL("http://127.0.0.1:9200"),
elastic.SetSniff(false),
elastic.SetHealthcheck(true),
elastic.SetGzip(true),
elastic.SetErrorLog(log.New(os.Stderr, "ELASTIC ", log.LstdFlags)),
elastic.SetInfoLog(log.New(os.Stdout, "", log.LstdFlags)),
elastic.SetTraceLog(log.New(ioutil.Discard, "", 0)),
Nach dem Login kopieren

)

Unter anderem für die Einstellungen Um eine Verbindung zu Elasticsearch herzustellen, haben wir die folgenden Konfigurationen vorgenommen:

    Die Methode
  1. SetURL() wird verwendet, um die IP- und Portnummer des Elasticsearch-Servers anzugeben. Die Methode
  2. SetSniff() wird verwendet, um zu verhindern, dass Elastic den automatisch erkennt Status anderer Knoten zur Laufzeit, um den Cluster-Gesundheitsstatus und andere Informationen zu erhalten; die Methode
  3. SetHealthcheck() wird verwendet. Um die Häufigkeit der Erkennung des Gesundheitsstatus anzugeben, wird eine Benachrichtigung gesendet, wenn eine Anomalie erkannt wird wird verwendet, um die Gzip-Komprimierungsfunktion des Elasticsearch-Clients zu aktivieren;
  4. SetErrorLog()-Methode wird verwendet, um Fehlerprotokollinformationen anzugeben;
  5. SetTraceLog()-Methode wird verwendet, um Eingabeaufforderungsinformationen anzugeben Tracking-Protokollinformationen.
  6. 3. Einfache Abfrage
  7. Nachdem wir eine Verbindung zu Elasticsearch hergestellt haben, können wir grundlegende Abfragen für die darin enthaltenen Daten durchführen. Hier ist ein einfaches Abfragebeispiel:
query := elastic.NewMatchQuery("name", "John")

result, err := client.Search().

Index("users").
Query(query).
Do(context.Background())
Nach dem Login kopieren

if err != nil {

// do something...
Nach dem Login kopieren
Nach dem Login kopieren

}

fmt.Printf("Die Abfrage hat %d Millisekunden gedauert

", result.TookInMillis)

Unter anderem verwenden wir die NewMatcQuery()-Methode im elastischen Paket, um eine exakt passende Abfrage zu erstellen. Das Abfragefeld ist Name und die Abfragebedingung ist „John“. Beim Ausführen der Abfrage legen wir den Abfrageindex auf Benutzer fest und geben die Abfragemethode an. Hier verwenden wir client.Search(), um die Abfrageoperation auszuführen. Schließlich verwenden wir die Methode result.TookInMillis, um die von der Abfrage verbrauchte Zeit zu ermitteln.

4. Erweiterte Abfrage

Bei der tatsächlichen Verwendung müssen wir komplexere Abfragefunktionen wie Bereichsabfrage, Fuzzy-Abfrage, Sortierung usw. implementieren. Elasticsearch unterstützt diese Funktionen durch Query DSL (Query Domain Specific Language). Hier sind einige Beispiele für gängige Abfragemethoden:

Volltextabfrage

    query := elastic.NewMatchQuery("content", "Elasticsearch")
Multi-Condition-Matching-Abfrage

    boolQuery := elastic.NewBoolQuery () .Must(
  1. elastic.NewMatchQuery("content", "Elasticsearch"),
    elastic.NewRangeQuery("age").Gt("20"),
    Nach dem Login kopieren
  2. )

Bereichsabfrage

    rangeQuery := elastic.NewRangeQuery("age").Gt("20").Lt("30")
Fuzzy-Abfrage

    fuzzyQuery : = elastic.NewFuzzyQuery("content", "Elasticsearch").
  1. Fuzziness(2).
    PrefixLength(1)
    
    Nach dem Login kopieren
sort

    sort := elastic.NewFieldSort("age").Asc()
  1. searchResult, err := client.Search() .
  2. Index("users").
    Query(boolQuery).
    SortBy(sort).
    Do(context.Background())
    
    Nach dem Login kopieren
Natürlich werden wir im tatsächlichen Gebrauch komplexere und flexiblere Abfragemethoden verwenden, um die Daten zu erhalten, die wir benötigen.


5. Paging und Aggregation

Bei der Datenabfrage müssen wir die Daten häufig im Paging anzeigen und eine Aggregationsabfrage durchführen. Elasticsearch bietet auch Abfragemethoden, die diese Vorgänge unterstützen. Im Folgenden sind einige häufige Abfragebeispiele aufgeführt:

Seitenabfrage

    searchResult, err := client.Search().
  1. Index("users").
    Query(boolQuery).
    From(0).Size(10).
    Do(context.Background())
    
    Nach dem Login kopieren
  2. Unter diesen wird die From()-Methode verwendet, um die Startposition der Abfrage und die Größe festzulegen Die Methode () wird verwendet, um die Anzahl der zurückgegebenen Datenelemente festzulegen.
  1. 聚合查询

ageAggs := elastic.NewTermsAggregation().Field("age")
searchResult, err := client.Search().

Index("users").
Query(boolQuery).
Aggregation("age_group", ageAggs).
Do(context.Background())
Nach dem Login kopieren

其中,我们使用了 Elastic 中的 NewTermsAggregation() 方法和 Aggregation() 方法来创建聚合查询。在这个示例中,我们以 "age" 字段作为聚合查询的依据。

六、总结
在本文中,我们介绍了如何在 Go 语言中使用 Elasticsearch 构建一个高效的搜索系统。从连接 Elasticsearch 开始,我们讲解了基础查询、进阶查询、分页和聚合查询等多种查询方式,以及如何使用 Elasticsearch 去提高我们的搜索效率,并给出了部分示例代码。通过阅读本文,您应该可以对 Go 和 Elasticsearch 之间的集成有一个更加深入的理解,应用于实际项目开发中去构建高效的搜索系统。

Das obige ist der detaillierte Inhalt vonVerwenden Sie Elasticsearch in der Go-Sprache, um eine effiziente Suche zu erreichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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