Elasticsearch 中的 OR 和 AND 运算符
OR and AND Operators in Elasticsearch
有这个映射:
"title": { "type": "text"},
"description": { "type": "text" },
"created_at": { "type": "date" },
"modified_at": { "type": "date" },
"funnel": {
"type": "nested",
"dynamic": "strict",
"properties": {
"id": { "type": "long" },
"stages": {
"type": "nested",
"dynamic": "strict",
"properties": {
"stage": {"type": "long"},
"date_in": {"type": "date"},
"date_out": {"type": "date"}
}
}
}
}
我试图获取一段时间内(从 2018-10-01 到 2018-10-05)至少有一个阶段嵌套文档的所有文档,或者它们仍处于一个阶段(date_out null) 使用以下查询:
"query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"nested": {
"query": {
"range": {
"funnel.stages.date_in": {
"lte": "2018-10-05"
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
},
{
"bool": {
"should": [
{
"nested": {
"query": {
"range": {
"funnel.stages.date_out": {
"gte": "2018-10-01"
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "funnel.stages.date_out"
}
}
],
"adjust_pure_negative": true
}
}
],
"adjust_pure_negative": true
}
}
],
"adjust_pure_negative": true
}
}
}
}
我认为这是在 elasticsearch 上执行此操作的方法,但后来我得到了这个文档作为匹配项:
"_source": {
"title": "sdfgsdfgsdf",
"description": "",
"created_at": "2018-07-17T13:45:39+00:00",
"modified_at": "2018-07-25T09:58:40+00:00",
"funnel": {
"id": "57",
"stages": [
{
"stage": "337",
"date_in": "2018-07-17T13:45:40+00:00",
"date_out": "2018-07-25T09:58:36+00:00"
}
]
}
}
此时我不知道自己在查询中做错了什么 :p
非常感谢任何帮助!
试试这个对我有用的查询:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"nested": {
"query": {
"range": {
"funnel.stages.date_in": {
"lte": "2018-10-05",
"gte": "2018-10-01"
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
},
{
"nested": {
"query": {
"range": {
"funnel.stages.date_out": {
"lte": "2018-10-05",
"gte": "2018-10-01"
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
}
]
}
},
{
"bool": {
"must": [
{
"nested": {
"query": {
"range": {
"funnel.stages.date_in": {
"lte": "2018-10-05",
"gte": "2018-10-01"
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
},
{
"nested": {
"query": {
"bool": {
"must_not": {
"exists": {
"field": "funnel.stages.date_out"
}
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
}
]
}
}
],
"adjust_pure_negative": true
}
}
}
有这个映射:
"title": { "type": "text"},
"description": { "type": "text" },
"created_at": { "type": "date" },
"modified_at": { "type": "date" },
"funnel": {
"type": "nested",
"dynamic": "strict",
"properties": {
"id": { "type": "long" },
"stages": {
"type": "nested",
"dynamic": "strict",
"properties": {
"stage": {"type": "long"},
"date_in": {"type": "date"},
"date_out": {"type": "date"}
}
}
}
}
我试图获取一段时间内(从 2018-10-01 到 2018-10-05)至少有一个阶段嵌套文档的所有文档,或者它们仍处于一个阶段(date_out null) 使用以下查询:
"query": {
"bool": {
"filter": {
"bool": {
"must": [
{
"nested": {
"query": {
"range": {
"funnel.stages.date_in": {
"lte": "2018-10-05"
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
},
{
"bool": {
"should": [
{
"nested": {
"query": {
"range": {
"funnel.stages.date_out": {
"gte": "2018-10-01"
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
},
{
"bool": {
"must_not": [
{
"exists": {
"field": "funnel.stages.date_out"
}
}
],
"adjust_pure_negative": true
}
}
],
"adjust_pure_negative": true
}
}
],
"adjust_pure_negative": true
}
}
}
}
我认为这是在 elasticsearch 上执行此操作的方法,但后来我得到了这个文档作为匹配项:
"_source": {
"title": "sdfgsdfgsdf",
"description": "",
"created_at": "2018-07-17T13:45:39+00:00",
"modified_at": "2018-07-25T09:58:40+00:00",
"funnel": {
"id": "57",
"stages": [
{
"stage": "337",
"date_in": "2018-07-17T13:45:40+00:00",
"date_out": "2018-07-25T09:58:36+00:00"
}
]
}
}
此时我不知道自己在查询中做错了什么 :p
非常感谢任何帮助!
试试这个对我有用的查询:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"nested": {
"query": {
"range": {
"funnel.stages.date_in": {
"lte": "2018-10-05",
"gte": "2018-10-01"
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
},
{
"nested": {
"query": {
"range": {
"funnel.stages.date_out": {
"lte": "2018-10-05",
"gte": "2018-10-01"
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
}
]
}
},
{
"bool": {
"must": [
{
"nested": {
"query": {
"range": {
"funnel.stages.date_in": {
"lte": "2018-10-05",
"gte": "2018-10-01"
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
},
{
"nested": {
"query": {
"bool": {
"must_not": {
"exists": {
"field": "funnel.stages.date_out"
}
}
}
},
"path": "funnel.stages",
"ignore_unmapped": false,
"score_mode": "none"
}
}
]
}
}
],
"adjust_pure_negative": true
}
}
}