ホームページ  >  記事  >  バックエンド開発  >  Go 言語で Elasticsearch を使用して効率的な検索を実現する

Go 言語で Elasticsearch を使用して効率的な検索を実現する

王林
王林オリジナル
2023-06-15 21:01:402029ブラウズ

ビッグデータ時代の到来により、データの保存と取得が私たちが直面する重要な問題になりました。 Elasticsearch は、オープン ソースの分散型リアルタイム検索および分析エンジンであり、高速な逆インデックス作成を通じて大量のデータを検索でき、効率的な全文検索、集計分析、リアルタイム モニタリング、自動補完、およびデータの視覚化を提供します。実践、アプリケーションシナリオで幅広い用途があります。同時に、高速な静的型付けプログラミング言語として、Go 言語はバックエンド サービス開発でも広く使用されています。この記事では、Go言語でElasticsearchを使用して効率的な検索機能を実装する方法を紹介します。

1. Elasticsearch と Go ライブラリをインストールする
まず、Elasticsearch クライアントに対する Go のサポートを実装するために、Elasticsearch と対応する Go ライブラリをインストールする必要があります。 Elasticsearch をインストールするには、Elasticsearch の公式 Web サイト (https://www.elastic.co/downloads/elasticsearch) にアクセスして、対応するバージョンのインストール パッケージをダウンロードし、オペレーティング システムとインストール方法に従ってインストールできます。 。

次に、Elasticsearch クライアント ライブラリを Go 環境に追加する必要があります。 Go には、Elasticsearch クライアントを使用したプログラミング開発をサポートするサードパーティ ライブラリが多数あります。その中で、より一般的なライブラリは次のとおりです。

  1. Elastic (ドキュメント アドレス: https://godoc.org/gopkg.in/olivere/elastic.v5)
  2. go-elasticsearch (ドキュメントアドレス: https://github.com/elastic/go-elasticsearch)
  3. golang-elasticsearch (ドキュメントアドレス: https://github.com/elastic/go-elasticsearch)

ここでは Elastic を選択します。 Go では、次のコマンドを使用して Elasticsearch クライアント ライブラリをインストールできます:

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

2. Elasticsearch に接続します
Connect Elasticsearch へ Elasticsearch サーバーの IP とポート番号を指定する必要があります。デフォルトでは、Elasticsearch のポート番号は 9200 です。次のメソッドで接続できます:

client, err := elastic.NewClient(

elastic.SetURL("http://127.0.0.1:9200"),
elastic.SetSniff(false),

)
if err != nil {

// do something...

}

Elasticsearch クライアントを作成するときは、次のコードのようなカスタム設定を行うこともできます。 :

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)),

)

このうち、Elasticsearchへの接続設定については以下の設定を行いました。

  1. SetURL() このメソッドは、Elasticsearch サーバーの IP とポート番号を指定するために使用されます。
  2. SetSniff() メソッドは、Elastic が他のノードのステータスを自動的に検出しないようにするために使用されます。クラスターの健全性ステータスやその他の情報を取得するためのランタイム;
  3. SetHealthcheck() メソッドは健全性ステータスの検出頻度を指定するために使用され、異常が検出された場合は通知が送信されます;
  4. SetGzip () メソッドは Elasticsearch クライアントの Gzip 圧縮機能を有効にするために使用されます;
  5. SetErrorLog() メソッドはエラー ログ情報を指定するために使用されます;
  6. SetInfoLog() メソッドはエラー ログ情報を指定するために使用されますプロンプト情報。
  7. SetTraceLog() メソッドは、追跡ログ情報を指定するために使用されます。

3. 基本的なクエリ
Elasticsearch に接続した後、その中のデータに対して基本的なクエリを実行できます。以下は簡単なクエリの例です:

query := elastic.NewMatchQuery("name", "John")
result, err := client.Search().

Index("users").
Query(query).
Do(context.Background())

if err != nil {

// do something...

}
fmt.Printf("Query は %d ミリ秒かかりました
", result.TookInMillis)

その中で、elastic パッケージを使用しましたNewMatcQuery() メソッドは完全一致クエリを作成します。クエリ フィールドは名前、クエリ条件は「John」です。クエリを実行する際には、クエリ インデックスを users に設定し、クエリ メソッドを指定します。ここでは client.Search() を使用してクエリ操作を実行します。最後に、result.TookInMillis メソッドを使用して、クエリに費やされた時間を取得します。

4. 高度なクエリ
実際の使用では、範囲クエリ、ファジー クエリ、並べ替えなど、より複雑なクエリ関数を実装する必要があります。 Elasticsearch は、Query DSL (Query Domain Specific Language) を通じてこれらの機能をサポートします。一般的なクエリの例を次に示します。

  1. フルテキスト クエリ

query := elastic.NewMatchQuery("content", "Elasticsearch")

  1. 複数条件一致クエリ

boolQuery := elastic.NewBool​​Query().Must(

elastic.NewMatchQuery("content", "Elasticsearch"),
elastic.NewRangeQuery("age").Gt("20"),

)

  1. 範囲クエリ

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

  1. ファジー クエリ

fuzzyQuery := elastic.NewFuzzyQuery("content", "Elasticsearch").

Fuzziness(2).
PrefixLength(1)
  1. sort

sort := elastic.NewFieldSort("age").Asc ( )
searchResult, err := client.Search().

Index("users").
Query(boolQuery).
SortBy(sort).
Do(context.Background())

もちろん、実際の使用では、より複雑で柔軟なクエリ メソッドを使用して、必要なデータを取得します。

5. ページングと集計
データ クエリを実行するとき、多くの場合、データをページに表示し、集計クエリを実行する必要があります。 Elasticsearch は、こ​​れらの操作をサポートするクエリ メソッドも提供します。一般的なクエリの例を次に示します。

  1. Page query

searchResult, err := client.Search().

Index("users").
Query(boolQuery).
From(0).Size(10).
Do(context.Background())

その中で、From () メソッドはクエリの開始位置を設定するために使用され、Size() メソッドは返されるデータ項目の数を設定するために使用されます。

  1. 聚合查询

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

Index("users").
Query(boolQuery).
Aggregation("age_group", ageAggs).
Do(context.Background())

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

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

以上がGo 言語で Elasticsearch を使用して効率的な検索を実現するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。