通过多个字段进行匹配查询

use*_*882 21 nosql elasticsearch

我对弹性搜索很新,想写一个关注两个字段的查询.我的意思是字段的内容包含指定的子字符串.我有一个包含字段的文档,如下所示:

name: n
tag: t
Run Code Online (Sandbox Code Playgroud)

我试过这个:

/_search -d '
{
    "query": {
        "match": {
             "name": "n",
             "tag": "t"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但查询导致以下错误:

[match]查询以简化形式解析,带有直接字段名称,但包含的选项多于字段名称,可能使用'options'形式,带'query'元素?

有没有办法在elasticsearch中做到这一点?

Val*_*Val 57

您需要match在查询中包含两个bool/must查询,如下所示:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "n"
          }
        },
        {
          "match": {
            "tag": "t"
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • @MatthewDean 这不是OP的需要。但是,如果您有不同的需求,请随意创建一个新问题,或者如果您想要的只是 OR 语义,那么只需将 `must` 替换为 `should` 并添加 `minimum_should_match: 1` 就可以了 (8认同)
  • 如何从每个字段中获取最少数量的记录(例如至少 5 条)。 (2认同)