gpt4 book ai didi

elasticsearch - 重构Elasticsearch模型以实现快速聚合

转载 作者:行者123 更新时间:2023-12-02 23:16:31 25 4
gpt4 key购买 nike

我的业务 Realm 是房地产 list ,我正在尝试构建一个多面的UI。因此,我需要进行汇总,以了解有多少个房源有1张床,2张床,在这个价格范围内有多少张床,有泳池的有几张等。

目前我的模型是这样的:

{
"beds": 1,
"baths": 1,
"price": 100000,
"features": ['pool','aircon'],
"inspections": [{
"startsOn": "2019-01-20"
}]
}

为了建立多方面的用户界面,我正在进行多种聚合,例如:
{
"aggs" : {
"beds" : {
"terms" : { "field" : "beds" }
},
"baths" : {
"terms" : { "field" : "baths" }
},
"features" : {
"terms" : { "field" : "features" }
}
}
}

你明白了。如果我有10个字段,那么我正在做10个聚合。

但是,看到 this article之后,我想我应该重新构建模型,如下所示:
{
"beds": 1,
"baths": 1,
"price": 100000,
"features": ['pool','aircon'],
"attributes": ['bed_1','bath_1','price_100000-200000','has_pool','has_aircon','has_inspection_tomorrow']
}

然后,我只需要1 agg:
{
"aggs": {
"attributes": {
"terms": {
"field": "attributes"
}
}
}
}

所以我有几个问题。
  • 这种方法的唯一缺点是将逻辑转移到客户端吗?如果是这样,我对此很满意-为了提高性能,因为我看不到这种逻辑经常更改。
  • 我也可以在查询中利用此字段吗?例如,如果我想匹配所有带有1个卧室,价格= 100000并带有泳池等的文档,该怎么办。字词查询适用于“任意”匹配,但是如何找到值数组包含所有提供的文档?条款?

  • 另外,如果您可以想到更好的结构来建模搜索速度,请告诉我!

    谢谢

    最佳答案

    对于第二点,您可以使用terms set query(doc here)。

    该查询类似于术语查询,但是您可以控制必须匹配的术语数。

    您可以通过如下脚本来配置它:

    GET /my-index/_search
    {
    "query": {
    "terms_set": {
    "codes" : {
    "terms" : ["bed_1","bath_1","price_100000-200000"],
    "minimum_should_match_script": {
    "source": "params.num_terms"
    }
    }
    }
    }
    }

    将要求所有参数匹配

    关于elasticsearch - 重构Elasticsearch模型以实现快速聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54212464/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com