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

Jun 15, 2023 pm 09:01 PM
go语言 elasticsearch 搜索

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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Was ist das Problem mit Warteschlangen -Thread in Go's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Welche Bibliotheken werden für die Operationen der schwimmenden Punktzahl in Go verwendet? Apr 02, 2025 pm 02:06 PM

In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Warum hat das Drucken von Saiten mit Println und String () -Funktionen unterschiedliche Effekte? Apr 02, 2025 pm 02:03 PM

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Wie löste ich das Problem des Typs des user_id -Typs bei der Verwendung von Redis -Stream, um Nachrichtenwarteschlangen in GO -Sprache zu implementieren? Apr 02, 2025 pm 04:54 PM

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Apr 02, 2025 pm 05:09 PM

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...

Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Welche Bibliotheken in GO werden von großen Unternehmen entwickelt oder von bekannten Open-Source-Projekten bereitgestellt? Apr 02, 2025 pm 04:12 PM

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Was ist der Unterschied zwischen 'var' und 'Typ' Typenwort Definition in der GO -Sprache? Apr 02, 2025 pm 12:57 PM

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Warum gibt es bei Verwendung von SQL.Open keinen Fehler an, wenn DSN leer ist? Warum gibt es bei Verwendung von SQL.Open keinen Fehler an, wenn DSN leer ist? Apr 02, 2025 pm 12:54 PM

Warum meldet der DSN bei Verwendung von SQL.Open keinen Fehler? In Go Language, Sql.open ...

See all articles