java - Elasticsearch精确匹配查询问题

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

我在查询 Elasticsearch 时遇到问题。以下是我的查询

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"
                    }
                }
            }

        ]
    }
}
}

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

最佳答案

您需要将您的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

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

关于java - Elasticsearch精确匹配查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52037158/

相关文章:

java - 什么是 Java 上的隐式构造函数

amazon-web-services - AWS APIGateway CloudFormation 指定方法所需的 Api key 吗?

java - 在Java中将字符串转换为二进制

java - 使用 Java 流打印列表项

java - Android 应用程序在运行时不会停止崩溃,ParseInt 出现问题

amazon-web-services - 无法通过 ssh 隧道 + 代理连接到远程实例

amazon-web-services - 使用Jenkins管道无法识别aws eks命令

elasticsearch - Kibana 4 中的静态列表

Elasticsearch 上的 Javascript 查询不适用于子元素

javascript - 未知字段 [dest],未找到解析器 - 重建索引时出错