在 Mapping 里面,将 dynamic 参数设置成 strict 可以拒绝索引包含未知字段的文档。 此条 Tips 由 medcl 贡献。

每天的价格不一样,如何查询。

Elasticsearch | 作者 bertonwang | 发布于2018年09月13日 | 阅读数:1979



有个酒店表,属性有:
标题、描述、价格等字段。
价格字段比较特殊,每天的价格都不一样。
{
    "roomList":[
        {
            "title":"如家中南海酒店",
            "desc":"大床房、标准间、双人床都有。",
            "priceList":[
                {
                    "date":"2019-10-01",
                    "price":330
                },
                {
                    "date":"2019-10-02",
                    "price":430
                },
                {
                    "date":"2019-10-03",
                    "price":450
                },
                {
                    "date":"2019-10-04",
                    "price":480
                }
            ]
        }
    ]
}

我想实现的搜索是:2019-10-02 ~ 2019-10-03,价格在400~450之间的酒店。
如何实现啊?

 
已邀请:

heeexy

赞同来自:

这结构是数组里面套数组, 有点诡异,也不利于查询
 嵌套结构搜索是可以搜的,但是只要数组里有一个元素符合条件, 就会返回数组下的全部元素
父子关系文档看起来更合适, 不过其查询本身限制也多,可以去了解一下

bertonwang

赞同来自:

我应该是没有表达清楚,原始数据是一个酒店数组,需要把每一个酒店信息都放到ES中,然后每个对象中的priceList是一个数组。
所以应该是涉及到一个数组。

God_lockin

赞同来自:

要不试试这样,嵌套查询+must+range的
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "roomList.priceList",
"query": {
"bool": {
"must": [
{
"range": {
"roomList.priceList.date": {
"lt": "2019-10-02",
"gte": "2019-10-03"
}
}
},
{
"range": {
"roomList.priceList.price": {
"lte": "400",
"gte": "450"
}
}
}
]
}
}
}
}
]
}
}
}

要回复问题请先登录注册