ビッグデータ時代の到来により、データの保存と取得が私たちが直面する重要な問題になりました。 Elasticsearch は、オープン ソースの分散型リアルタイム検索および分析エンジンであり、高速な逆インデックス作成を通じて大量のデータを検索でき、効率的な全文検索、集計分析、リアルタイム モニタリング、自動補完、およびデータの視覚化を提供します。実践、アプリケーションシナリオで幅広い用途があります。同時に、高速な静的型付けプログラミング言語として、Go 言語はバックエンド サービス開発でも広く使用されています。この記事では、Go言語でElasticsearchを使用して効率的な検索機能を実装する方法を紹介します。
1. Elasticsearch と Go ライブラリをインストールする
まず、Elasticsearch クライアントに対する Go のサポートを実装するために、Elasticsearch と対応する Go ライブラリをインストールする必要があります。 Elasticsearch をインストールするには、Elasticsearch の公式 Web サイト (https://www.elastic.co/downloads/elasticsearch) にアクセスして、対応するバージョンのインストール パッケージをダウンロードし、オペレーティング システムとインストール方法に従ってインストールできます。 。
次に、Elasticsearch クライアント ライブラリを Go 環境に追加する必要があります。 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への接続設定については以下の設定を行いました。
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) を通じてこれらの機能をサポートします。一般的なクエリの例を次に示します。
query := elastic.NewMatchQuery("content", "Elasticsearch")
boolQuery := elastic.NewBoolQuery().Must(
elastic.NewMatchQuery("content", "Elasticsearch"), elastic.NewRangeQuery("age").Gt("20"),
)
rangeQuery := elastic.NewRangeQuery("age").Gt("20").Lt("30")
fuzzyQuery := elastic.NewFuzzyQuery("content", "Elasticsearch").
Fuzziness(2). PrefixLength(1)
sort := elastic.NewFieldSort("age").Asc ( )
searchResult, err := client.Search().
Index("users"). Query(boolQuery). SortBy(sort). Do(context.Background())
もちろん、実際の使用では、より複雑で柔軟なクエリ メソッドを使用して、必要なデータを取得します。
5. ページングと集計
データ クエリを実行するとき、多くの場合、データをページに表示し、集計クエリを実行する必要があります。 Elasticsearch は、これらの操作をサポートするクエリ メソッドも提供します。一般的なクエリの例を次に示します。
searchResult, err := client.Search().
Index("users"). Query(boolQuery). From(0).Size(10). Do(context.Background())
その中で、From () メソッドはクエリの開始位置を設定するために使用され、Size() メソッドは返されるデータ項目の数を設定するために使用されます。
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 サイトの他の関連記事を参照してください。