我想在弹性搜索中模拟父子关系,并对其执行一些分析工作。我的用例是这样的
我有这样的店主
"_source": {
"shopId": 5,
"distributorId": 4,
"stateId": 1,
"partnerId": 2,
}
现在有这样的子记录(每天):
"_source": {
"shopId": 5,
"date" : 2013-11-13,
"transactions": 150,
"amount": 1980,
}
父项是每个商店的记录,而子项是每个商店所做的交易 天。现在我想做一些像
这样的复杂查询查看经销商为5的最近30天内每天的总交易
POST /newdb/shopsDaily/_search
{
"query": {
"match_all": {}
},
"filter": {
"has_parent": {
"type": "shop",
"query": {
"match": {
"distributorId": "5"
}
}
}
},
"facets": {
"date": {
"histogram": {
"key_field": "date",
"value_field": "transactions",
"interval": 100
}
}
}
}
但是我得到的结果并没有考虑我应用的过滤。
所以我将查询更改为:
POST /newdb/shopDaily/_search
{
"query": {"filtered": {
"query": {"match_all": {}},
"filter": { "has_parent": {
"type": "shop",
"query": {"match": {
"distributorId": "13"
}}
}}
}},
"facets": {
"date": {
"histogram": {
"key_field": "date",
"value_field": "transactions",
"interval": 100
}
}
}
}
然后最终的直方图方面过滤到计数。
所以,当我浏览时,虽然我发现这是由于使用filtered
(只能在查询子句中使用,而不是在filter
之外),而不是filter
,
但它也提到要快速搜索,你应该使用filter
。我会在第二步(当我使用filtered
而不是filter
时)进行搜索会影响弹性搜索的效果吗?如果是这样,我怎样才能使我的方面尊重过滤器而不影响性能?
谢谢你的时间
答案 0 :(得分:0)
过滤器(查询子句中的过滤器)被缓存,因此更快。这些类型的过滤器会影响搜索结果和构面计数。 在构面计算期间不考虑查询子句之外的过滤器。它们仅被视为搜索结果。 Facet仅根据query子句计算。如果您想要过滤方面,则需要为每个方面子句设置过滤器。