我的业务领域是房地产列表,我正在尝试构建一个多面的UI。因此,我需要进行汇总,以了解有多少个房源有1张床,2张床,在这个价格范围内有多少张床,有泳池的有几张等。
目前我的模型是这样的:
{
"beds": 1,
"baths": 1,
"price": 100000,
"features": ['pool','aircon'],
"inspections": [{
"startsOn": "2019-01-20"
}]
}
要构建多面的UI,我需要进行多种聚合,例如:
{
"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"
}
}
}
}
所以我有几个问题。
或者,如果您能想到更好的结构来建模以提高搜索速度,请告诉我!
谢谢
答案 0 :(得分:0)
第二点,您可以使用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"
}
}
}
}
}
将要求所有参数匹配