Elasticsearch:开始日期和结束日期列表中的匹配范围

问题描述

我想要实现的是仅在查询中提供的日期在1个单周期的范围内时才返回结果。现在,我有一个查询,该查询部分起作用,但是它在可用性列表的所有时段内都进行了查询。之所以匹配,是因为存在一个开始日期小于或等于2020-12-25T00:00:00,并且存在结束日期某个位置大于或等于2020-12-22T00:00:00

我想要的是与下面提供的文档不匹配的查询,因为两个期间都不匹配我输入的查询

这是我的数据模型的一部分:

{
    "units": [
        {
            "availability": [
                {
                    "period": [
                        {
                            "start": "2020-09-12T00:00:00","end": "2020-10-31T00:00:00"
                        }
                    ]
                },{
                    "period": [
                        {
                            "start": "2021-04-03T00:00:00","end": "2021-04-24T00:00:00"
                        }
                    ]
                }
            ]
        }
    ]
}

这是我现在的Elasticsearch查询

{ 
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "units.availability.period.start": {
                            "lte": "2020-12-25T00:00:00"
                        }
                    }
                },{
                    "range": {
                        "units.availability.period.end": {
                            "gte": "2020-12-22T00:00:00"
                        }
                    }
                }
            ]
        }
    }
}

任何建议都会有很大帮助!

解决方法

我怀疑it('updates an prop on every object in an array',() => { const result = service.methodThatUpdates([{ prop: 'orig' },{ prop: 'orig' }]); expect(result).toEqual([ jasmine.objectContaining({ prop: 'changed' }),jasmine.objectContaining({ prop: 'changed' }) ]); }); 必须是nested;否则,数组对象的值get flattened以及toEqual s和availability之间的连接丢失了。


简而言之,删除索引,更改映射,重新索引,然后使用类似的内容

start

顺便说一句,您可能还想考虑自己制作end { "query": { "bool": { "must": [ { "nested": { "path": "units.availability","query": { "bool": { "must": [ { "range": { "units.availability.period.start": { "lte": "2020-12-25T00:00:00" } } },{ "range": { "units.availability.period.end": { "gte": "2020-12-22T00:00:00" } } } ] } } } } ] } } } -它们看起来也像独立实体!