【问题标题】:Elastic search exact match query issue弹性搜索完全匹配查询问题
【发布时间】:2019-02-01 20:45:14
【问题描述】:

我在查询弹性搜索时遇到问题。以下是我的查询

GET _search {
"query": {
    "bool": {
        "must": [{
                "match": {
                    "name": "SomeName"
                }
            },
            {
                "match": {
                    "type": "SomeType"
                }
            },
            {
                "match": {
                    "productId": "ff134be8-10fc-4461-b620-79s51199c7qb"
                }
            },
            {
                "range": {
                    "request_date": {
                        "from": "2018-08-22T12:16:37,392",
                        "to": "2018-08-28T12:17:41,137",
                        "format": "YYYY-MM-dd'T'HH:mm:ss,SSS"
                    }
                }
            }

        ]
    }
}
}

我在 bool 查询中使用了三个匹配查询和一个范围查询。我的意图是获取具有这些完全匹配且在此日期范围内的文档。在这里,如果我更改名称和类型值,我不会得到结果。但是对于 productId ,如果我只输入 ff134be8,我会得到结果。任何人都知道这是为什么? .完全匹配适用于名称和类型,但不适用于 productId

【问题讨论】:

  • 您也可以发布您的映射吗?您使用哪个弹性搜索版本?顺便说一句,如果你需要准确的检查,你应该实现一个术语查询而不是匹配一个
  • 能否提供更多关于您的查询的信息,例如您是使用 kibana 还是任何 java 客户端来获取信息
  • @EiriniGraonidou,我没有使用任何映射。 AWS kinesis 正在将条目写入 ES。取决于我们传递的数据,它会自动创建映射

标签: java amazon-web-services elasticsearch elastic-stack


【解决方案1】:

您需要将您的 productId 映射设置为 keyword 以避免标记化。使用标准标记器"ff134be8-10fc-4461-b620-79s51199c7qb" 将创建["ff134be8", "10fc", "4461", "b620", "79s51199c7qb"] 作为标记。

你有不同的选择:

1/使用term query进行检查而不分析字段内容

...
    {
        "term": {
            "productId": "ff134be8-10fc-4461-b620-79s51199c7qb"
        }
    },
    ...

2/ 如果您使用的是 Elasticsearch 6.X,您可以将您的请求更改为

...
{
    "match": {
        "productId.keyword": "ff134be8-10fc-4461-b620-79s51199c7qb"
    }
},
...

因为 elasticsearch 将为所有字符串字段创建一个类型为 keyword 的子字段 keyword

当然,最好的选择是第一个。如果您想匹配确切的内容,请始终使用term query

【讨论】:

  • 如果我使用第一个解决方案,我可以包含多个术语查询吗?我还需要匹配其他两个项目。顺便说一下,第二个解决方案起作用了:)
  • 您可以使用术语:{ productId: ['ff134be8-10fc-4461-b620-79s51199c7qb', 'xxx-xxx-xxxx']}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
相关资源
最近更新 更多