Golang中的多索引ElasticSearch查询

8qgya5xd  于 2023-01-01  发布在  ElasticSearch
关注(0)|答案(1)|浏览(216)

Hy,我在Elasticsearch中为多个索引创建搜索查询时遇到了问题。我有两个索引,一个是“文件”,具有字段“文件名”,其他索引是“消息”,具有字段“消息ID”。我想得到基于两个索引的结果,其中文件名=“ELS中的任何存储名称”从文件索引和消息ID =“ELS中的任何存储ID”。我想在单个查询中进行此搜索。
尝试基于多索引的ELS查询。

wko9yo5t

wko9yo5t1#

elasticsearch中搜索请求的URL中的索引指定要在其中搜索的索引。您可以通过在搜索请求的URL中指定索引来在一个或多个索引中搜索。
要搜索与files索引的filename字段或message索引的messageid字段中的特定短语相匹配的文档,可以在带有should子句的bool查询中使用match_phrase查询。这使您可以搜索与任一查询相匹配的文档,同时只返回与指定短语完全匹配的文档。
下面是一个例子:

POST /files,message/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "filename": "any stored name in els"
          }
        },
        {
          "match_phrase": {
            "messageid": "any stored id in ELS"
          }
        }
      ]
    }
  }
}

此搜索请求将返回files索引的filename字段中包含确切短语"any stored name in els"或message索引的messageid字段中包含确切短语"any stored id in ELS"的所有文档。
这就是在Golang实现这一目标的方式:

query := elasticsearch.NewBoolQuery().Should(
    elasticsearch.NewMatchPhraseQuery("filename", "any stored name in els"),
    elasticsearch.NewMatchPhraseQuery("messageid", "any stored id in ELS"),
)

searchResult, err := client.Search().
    Index("files", "message").
    Query(query).
    Do(context.Background())

相关问题