[英]Updating a record by query in ElasticSearch using olivere/elastic in google go
[英]how to query using ... olivere / elastic?
我正在嘗試使用 github.com/olivere/elastic 在 elasticsearch 上搜索文檔,但我無法創建查詢...
我需要結果...
{
"query": {
"bool": {
"must": [
{
"match": {
"recipient_id": 111
}
}
]
}
}
}
但是在代碼中...
import "github.com/olivere/elastic"
boolQuery := elastic.NewBoolQuery()
mustQueries := make([]elastic.Query, 0)
mustQueries = append(mustQueries, elastic.NewMatchQuery("recipient_id", 11))
boolQuery.Must(mustQueries...)
src, _ := boolQuery.Source()
PrintQuery(src)
func PrintQuery(src interface{}) {
fmt.Println("*****")
data, err := json.MarshalIndent(src, "", " ")
if err != nil {
panic(err)
}
fmt.Println(string(data))
}
結果
{
"bool": {
"must": {
"match": {
"recipient_id": {
"query": 11
}
}
}
}
}
你要離開這個...請你幫幫我好嗎?
這是我進行查詢的代碼
func Search() {
client, err := GetClient()
if err != nil { panic(err) }
boolQuery := elastic.NewBoolQuery()
mustQueries := make([]elastic.Query, 0)
mustQueries = append(mustQueries, elastic.NewMatchQuery("recipient_id", 111))
boolQuery.Must(mustQueries...)
searchResult, err := client.Search().
Index(NameIndex).
Type("_search").
Query(boolQuery).
Do(context.Background())
fmt.Println(searchResult)
fmt.Println(searchResult)
}
我從你的帖子中解釋兩個問題
問題 1 的答案
在下面的代碼片段中,您只在 must 查詢中放置了一個匹配查詢。
mustQueries := make([]elastic.Query, 0)
mustQueries = append(mustQueries, elastic.NewMatchQuery("recipient_id", 111))
因此匹配元素包含一個 object 項,如下所示
"must": {
"match": {
"recipient_id": {
"query": 11
}
}
}
如果在 must 查詢中再放置一個 match 查詢,您將得到一個數組項。 以下代碼片段生成一個帶有數組項的匹配元素。
mustQueries := make([]elastic.Query, 0)
mustQueries = append(mustQueries, elastic.NewMatchQuery("recipient_id", 111))
mustQueries = append(mustQueries, elastic.NewMatchQuery("recipient_name", 'tom'))
上面的代碼片段產生以下查詢
"must": [
{
"match": {
"recipient_id": {
"query": 11
}
}
},
{
"match": {
"recipient_name": {
"query": "tom"
}
}
}
]
問題 2 的答案
NewMatchQuery(...,...) API 生成全文匹配查詢。 這就是原因,你得到以下匹配查詢
"match": {
"recipient_id": {
"query": 11
}
}
而不是下面的。
"match": {
"recipient_id": 11
}
最后,查詢您期望的內容和查詢代碼生成的內容獲取相同的結果。
順便說一句:您的帖子給了我解決問題的提示,並最終回答了您的問題。 謝謝你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.