在Go中操作Elasticsearch進行查詢,需要使用Elasticsearch的官方Go客戶端庫。以下是一個簡單的示例,演示如何使用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的文檔。
接下來,我們使用client.Search()
方法執行查詢請求,并指定索引名稱為"books"。然后,使用Do()
方法發送請求并獲取查詢結果。
最后,我們遍歷查詢結果,并打印每個結果的ID和得分。同時,我們還打印出查詢結果的總數。
請注意,這只是一個簡單的示例,實際使用中可能需要根據具體需求進行更復雜的查詢。你可以根據Elasticsearch的查詢DSL文檔,使用不同的查詢構造器來構建更復雜的查詢條件。