Go操作 ES-4(クエリ検索)
GoでElasticsearchを操作するには、Elasticsearchの公式Goクライアントライブラリを使用する必要があります。Elasticsearchにクエリ要求を送信して結果を取得する方法を以下に簡単な例を示します。
package main
import (
"context"
"fmt"
"log"
"strings"
"github.com/olivere/elastic"
)
func main() {
// 创建一个Elasticsearch客户端连接
client, err := elastic.NewClient(elastic.SetURL("http://localhost:9200"))
if err != nil {
log.Fatal(err)
}
// 构建查询条件
query := elastic.NewBoolQuery().
Must(elastic.NewMatchQuery("title", "go")).
Filter(elastic.NewRangeQuery("year").Gte(2010))
// 执行查询请求
searchResult, err := client.Search().
Index("books").
Query(query).
Do(context.Background())
if err != nil {
log.Fatal(err)
}
// 遍历查询结果
for _, hit := range searchResult.Hits.Hits {
fmt.Printf("ID: %s, Score: %f\n", hit.Id, hit.Score)
}
// 输出查询结果的总数
fmt.Printf("Total hits: %d\n", searchResult.Hits.TotalHits.Value)
}
このサンプルでは、まずElasticsearchクライアントへの接続を作成し、ElasticsearchのURLを指定します。次に、elastic.NewBoolQuery()を使用してブールクエリを作成し、Must()、Filter()メソッドを使用してクエリ条件を追加します。このサンプルでは、MatchQueryを使用してタイトルに「go」が含まれるドキュメントを照会し、RangeQueryを使用して年が2010以上であるドキュメントを照会しています。
次に、「books」というインデックス名を指定してclient.Search()メソッドによってクエリリクエストを行い、Do()メソッドでリクエストを送信してクエリ結果を取得します。
最後に、検索結果を走査し、各結果の ID とスコアを出力します。また、検索結果の総数も出力します。
この例は単に一例であり、実際の利用では要求に応じてより複雑な問い合わせが必要となる場合があります。Elasticsearch の問い合わせ DSL ドキュメントに基づき、異なる問い合わせビルダーを利用して、より複雑な問い合わせ条件を作成することができます。