我无法进行 flex 搜索以生成要显示给用户的构面/集合。
TLTR
我不希望这些方面在此站点上表现这些方面:
https://mad.coop.dk/frugt-og-groent#!/frugt-og-baer
想象一个搜索页面,我们在这里显示要出售的汽车。汽车的建模如下:
汽车
{
"brand": "Ford",
"color": "Blue"
}
INDEXING
在索引中增加4辆车
POST /agg_analysis/data/_bulk
{ "index": {}}
{ "brand" : "Ford", "color":"Blue" }
{ "index": {}}
{ "brand" : "Ford", "color":"Red" }
{ "index": {}}
{ "brand" : "Toyota", "color":"Blue" }
{ "index": {}}
{ "brand" : "Toyota", "color":"Yellow" }
初始界面
在页面左侧,我们允许用户过滤汽车
初始查询
聚合是直接的
GET /agg_analysis/data/_search
{
"aggs": {
"brand": {
"terms": {
"field": "brand"
}
},
"color": {
"terms": {
"field": "color"
}
}
}
}
使用案例1:找到我一辆蓝色轿车
用户单击颜色:蓝色小平面,小平面和汽车也将相应更新
GET /agg_analysis/data/_search
{
"query": {
"term": {
"color": {
"value": "blue"
}
}
},
"aggs": {
"brand": {
"terms": {
"field": "brand"
}
},
"color": {
"terms": {
"field": "color"
}
}
}
}
一切都很好,用户很满意
使用案例2:为我找到蓝色或红色的汽车
这是问题开始的地方。当用户单击蓝色复选框时,红色复选框消失。
所以我想要的是所有方面都已更新-除了用户单击的方面之外。
使用案例3:找到我是蓝色或红色的汽车,应该是福特
这是同样的问题。
最佳答案
您只需要更改查询以使用post_filter
而不是query
,即让对全部文档进行汇总计算,然后才使用post_filter
过滤生成的文档。使用query
,文档会在之前过滤到,然后才能运行聚合,因此为什么您不再看到所有方面。GET /agg_analysis/data/_search
{
"post_filter": {
"term": {
"color": {
"value": "blue"
}
}
},
"aggs": {
"brand": {
"filter": {
"term": {
"color": {
"value": "blue"
}
}
},
"aggs": {
"terms": {
"field": "brand"
}
}
},
"color": {
"terms": {
"field": "color"
}
}
}
}
您还会看到brand
聚合被过滤为仅显示blue
颜色的品牌。
关于elasticsearch - 允许用户在集合中使用OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38916795/