elasticsearch 如何使用olivere / elastic进行查询?

gojuced7  于 2023-01-20  发布在  ElasticSearch
关注(0)|答案(1)|浏览(214)

我尝试使用github.com/olivere/elastic在elasticsearch上搜索文档,但无法创建查询...
我需要结果...

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "recipient_id": 111
                    }
                }
            ]
        }
    }
}

但在密码里...
x一个一个一个一个x一个一个二个x
结果

{
  "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)
}
lnxxn5zx

lnxxn5zx1#

我从你的帖子中解读了两个问题
1.为什么查询必须包含对象项而不是数组项?
1.为什么匹配查询的格式不同?

  • 对问题1的答复 *

在下面的代码段中,您只在must查询中放置了一个匹配查询。

mustQueries := make([]elastic.Query, 0)
mustQueries = append(mustQueries, elastic.NewMatchQuery("recipient_id", 111))

因此match元素包含一个对象项,如下所示

"must": {
   "match": {
      "recipient_id": {
         "query": 11
       }
    }
 }

如果你在must查询中再放置一个match查询,你将得到一个数组项。下面的代码片段产生了一个带有数组项的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
}

最后,查询您所期望的内容和查询代码生成的内容将获取相同的结果。
顺便说一句:你的帖子给了我一个解决问题的提示,最后给了你问题的答案。谢谢。

相关问题