sql - Elasticsearch 不存在值
问题描述
我正在处理我发现的一个查询。它比我想象的要复杂一些。这是由事件名称区分的每个数据文档的一部分。
"eventTime" : "2021-07-11T08:29:00-0800",
"userId" : "P9QuPERPURPC3swJpyBb4",
"eventName" : "mko", // mko and mkp are two possible values
"eventData" : {}
目标是:userIds
谁有eventName('mko')
AND 没有eventName('mkp')
我无法准确理解在Elasticsearch
查询中处理“不存在”的最佳方法是什么。我会很感激任何帮助。
解决方案
我认为以下查询可能会对您有所帮助。
获取名为的用户mko
:
{
"query": {
"bool": {
"must": [
{
"term": {
"eventName": "mko"
}
}
]
}
}
}
获取名称不是 的用户mko
:
{
"query": {
"bool": {
"must_not": [
{
"term": {
"eventName": "mko"
}
}
]
}
}
}
获取名为的用户mkp
:
{
"query": {
"bool": {
"must": [
{
"term": {
"eventName": "mkp"
}
}
]
}
}
}
获取名称不是 的用户mkp
:
{
"query": {
"bool": {
"must_not": [
{
"term": {
"eventName": "mkp"
}
}
]
}
}
}
要仅获取选定的字段,您可以使用_source
查询中的字段:https ://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html 。
并检查该字段eventName
是否exists
在文档中。您可以在exists
查询中使用must
查询:https ://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html
推荐阅读
- linux - Makefile 目标在不同的操作系统上表现不同
- arrays - 用于数组的 C sizeof - 数组与指针表示法作为函数参数
- vb.net - VB.Net 电子邮件未将副本放入已发送文件夹
- ruby-on-rails - 迁移 ActiveModel::UnknownAttributeError: 未知属性中的 Rails 错误
- java - 连接被拒绝。失败消息:javax.mail.MessagingException:无法连接
- c++ - 如何使用 Qt 5.14 MSVC2017 在 QT Creator 中进入 Qt 源代码?
- google-cloud-platform - 使用负载平衡器配置 Cloud Run 服务和 GCS 存储桶
- azure - 具有虚拟主机的 Azure dotnet 工作者是否可以具有公共 URL
- php - 数组到字符串异常 Laravel
- node.js - Knex:获取连接超时