elasticsearch elasticsearch中字段的条件查询
我是Elasticsearch的新手,在发布这个问题之前,我在谷歌上搜索了一些帮助,但不知道如何编写我想要编写的查询 我的问题是我要查询的文档很少,这些文档中很少有字段“DueDate”,也很少有字段“PlannedCompletionDate”,但不是都存在于单个文档中。所以我想写一个查询,它应该有条件地从文档中查询一个字段并返回所有文档 例如,下面我正在证明每种类型的示例文档,并且我的查询应该返回来自这两个文档的结果,我需要编写一个查询,该查询应该检查字段是否存在并返回文档 “_来源”:{ ... “计划完工日期”:“2019-06-30T00:00:00.000Z”, ... } “_来源”:{ ... “到期日”:“2019-07-26T07:00:00.000Z”, ... }您可以结合使用来实现您的用例 添加带有索引映射、数据、搜索查询和搜索结果的工作示例 索引映射:
elasticsearch elasticsearch中字段的条件查询,
elasticsearch,
elasticsearch,我是Elasticsearch的新手,在发布这个问题之前,我在谷歌上搜索了一些帮助,但不知道如何编写我想要编写的查询 我的问题是我要查询的文档很少,这些文档中很少有字段“DueDate”,也很少有字段“PlannedCompletionDate”,但不是都存在于单个文档中。所以我想写一个查询,它应该有条件地从文档中查询一个字段并返回所有文档 例如,下面我正在证明每种类型的示例文档,并且我的查询应该返回来自这两个文档的结果,我需要编写一个查询,该查询应该检查字段是否存在并返回文档 “_来源”:{
{
"mappings": {
"properties": {
"plannedCompleteDate": {
"type": "date",
"format": "yyyy-MM-dd"
},
"dueDate": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}
{
"plannedCompleteDate": "2019-05-30"
}
{
"plannedCompleteDate": "2020-06-30"
}
{
"dueDate": "2020-05-30"
}
{
"query": {
"bool": {
"should": [
{
"range": {
"plannedCompleteDate": {
"gte": "2020-01-01",
"lte": "2020-12-31"
}
}
},
{
"range": {
"dueDate": {
"gte": "2020-01-01",
"lte": "2020-12-31"
}
}
}
]
}
}
}
"hits": [
{
"_index": "65808850",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"plannedCompleteDate": "2020-06-30"
}
},
{
"_index": "65808850",
"_type": "_doc",
"_id": "2",
"_score": 1.0,
"_source": {
"dueDate": "2020-05-30"
}
}
]
索引数据:
{
"mappings": {
"properties": {
"plannedCompleteDate": {
"type": "date",
"format": "yyyy-MM-dd"
},
"dueDate": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}
{
"plannedCompleteDate": "2019-05-30"
}
{
"plannedCompleteDate": "2020-06-30"
}
{
"dueDate": "2020-05-30"
}
{
"query": {
"bool": {
"should": [
{
"range": {
"plannedCompleteDate": {
"gte": "2020-01-01",
"lte": "2020-12-31"
}
}
},
{
"range": {
"dueDate": {
"gte": "2020-01-01",
"lte": "2020-12-31"
}
}
}
]
}
}
}
"hits": [
{
"_index": "65808850",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"plannedCompleteDate": "2020-06-30"
}
},
{
"_index": "65808850",
"_type": "_doc",
"_id": "2",
"_score": 1.0,
"_source": {
"dueDate": "2020-05-30"
}
}
]
搜索查询:
{
"mappings": {
"properties": {
"plannedCompleteDate": {
"type": "date",
"format": "yyyy-MM-dd"
},
"dueDate": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}
{
"plannedCompleteDate": "2019-05-30"
}
{
"plannedCompleteDate": "2020-06-30"
}
{
"dueDate": "2020-05-30"
}
{
"query": {
"bool": {
"should": [
{
"range": {
"plannedCompleteDate": {
"gte": "2020-01-01",
"lte": "2020-12-31"
}
}
},
{
"range": {
"dueDate": {
"gte": "2020-01-01",
"lte": "2020-12-31"
}
}
}
]
}
}
}
"hits": [
{
"_index": "65808850",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"plannedCompleteDate": "2020-06-30"
}
},
{
"_index": "65808850",
"_type": "_doc",
"_id": "2",
"_score": 1.0,
"_source": {
"dueDate": "2020-05-30"
}
}
]
搜索结果:
{
"mappings": {
"properties": {
"plannedCompleteDate": {
"type": "date",
"format": "yyyy-MM-dd"
},
"dueDate": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}
{
"plannedCompleteDate": "2019-05-30"
}
{
"plannedCompleteDate": "2020-06-30"
}
{
"dueDate": "2020-05-30"
}
{
"query": {
"bool": {
"should": [
{
"range": {
"plannedCompleteDate": {
"gte": "2020-01-01",
"lte": "2020-12-31"
}
}
},
{
"range": {
"dueDate": {
"gte": "2020-01-01",
"lte": "2020-12-31"
}
}
}
]
}
}
}
"hits": [
{
"_index": "65808850",
"_type": "_doc",
"_id": "1",
"_score": 1.0,
"_source": {
"plannedCompleteDate": "2020-06-30"
}
},
{
"_index": "65808850",
"_type": "_doc",
"_id": "2",
"_score": 1.0,
"_source": {
"dueDate": "2020-05-30"
}
}
]
忘了提及,在所有文档中,我感兴趣的是获取所有包含字段dueDate或plannedCOmpletionDate的文档。这些文档中没有一个同时包含dueDate和plannedCOmpletionDate字段。因此,您想获取那些既包含
plannedCompleteDate
字段又包含dueDate
字段但不同时包含这两个字段的文档吗?是的,并且这些文档中没有一个同时包含这两个字段。因此,我的查询应该类似于“如果文档中包含dueDate或plannedCompletionDate,则从文档中选择日期,并且日期应介于“2020-01-01”和“2020-12-31”之间”。索引中是否有包含这两个字段的文档?不,我想,可以肯定,我如何检查是否有此类文件?@Sunil Yerra请仔细查看答案,并让我知道这是否是问题所在?感谢您的快速帮助,我将尝试此方法,并让您了解我的经验。当然@Sunil Yerra,期待您的反馈:)谢谢您的帮助,效果很好。我现在能够增强该查询以获得更有用的结果。谢谢兄弟。我的范围应该小于现在,在示例中我给出了一些日期供参考。。。。下面是为我工作的查询{“bool”:{“should”:[{“range”:{“dueDate”:{“lt”:“now”}},{“range”:{“plannedpletedate”:{“lt”:“now” } } } ] } }