elasticsearch - 在Elasticsearch中处理可选字段搜索

标签 elasticsearch elasticsearch-query

我正在使用ES 5.5,并且像这样使用javasript API请求查询dsl

client.search({
  index: 'demo',
  type: 'sample',
  body: {
    "query": {
      "bool": {
        "must": [
          {
            "match": {
              "CityName": {
                query: req.params.city,
                slop: 100
              }
            }
          },
          {
            "match": {
              "StateName": {
                query: req.params.state,
                slop: 100
              }
            },
            {
              "match": {
                "Code": {
                  query: req.params.code,
                  slop: 100
                }
              }
            }
          ]
        }
      }
    }
  })

当用户提供所有三个值时,该查询工作正常,但是在我的情况下,这三个参数不是强制性的,每个用户都可以给出一个值或多个值,并且给定字段must match文档。使用一个或两个值进行搜索不会返回任何东西。

最佳答案

您需要将must替换为should。有关更多详细信息,请引用boolean query

client.search({
  index: 'demo',
  type: 'sample',
  body: {
    "query": {
      "bool": {
        "must": [ --> replace this `must` with `should`
          {
            "match": {
              "CityName": {
                query: req.params.city,
                slop: 100
              }
            }
          },
          {
            "match": {
              "StateName": {
                query: req.params.state,
                slop: 100
              }
            },
            {
              "match": {
                "Code": {
                  query: req.params.code,
                  slop: 100
                }
              }
            }
          ]
        }
      }
    }
  })

关于elasticsearch - 在Elasticsearch中处理可选字段搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62145481/

相关文章:

json - 如何在json中输入标题?

loops - Elasticsearch 遍历两个索引的值

elasticsearch - Elasticsearch查询通过搜索后找到丢失的文档

elasticsearch - 如何在Elasticsearch中使用数组字段精确查找短语?

elasticsearch - 比较Elasticsearch索引中的不同文档字段值

elasticsearch - 为什么我们需要设置发布地址[network.host] 值

javascript - 在 Elasticsearch 中,是否可以对索引执行临时 POST?

java - 为什么在 Elastic 搜索中引入 Java 高级 REST 客户端?

elasticsearch - Elasticsearch 中的 prefixQuery 不起作用

elasticsearch - 如何在从 API 返回之前过滤 _source?