我希望在Elastic Search中使用多个级别的过滤器来使用NEST API来派生结果集。是否可以查询另一个过滤器的结果......?如果是,我可以在多个级别中执行此操作吗?
我的要求就像允许用户选择/取消选择各个字段的选项。
示例:我的索引中共有1000个文档' people'。可能有3个ListBox,1)城市2)最喜欢的食物3)最喜欢的颜色。如果用户选择城市,则过滤掉600个文档。在这600份文件中,我想过滤最喜欢的食物,这可能会产生大约300份文件。现在进一步我想用resp过滤。最喜欢的电影,从以前派生的300个文件中检索50个文件。
答案 0 :(得分:3)
您不需要在过滤器中查询以实现您想要的效果。只需使用已过滤的查询http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html,并提供多个过滤器。在你的实例中,我会假设你会为你的第一个查询做这样的事情:
{
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"and" : [
{
"term" : {
"city" : "some city"
}
}
]
}
}
}
然后,您将返回结果并显示它们。然后,您让他们选择下一个过滤器并执行以下操作:
{
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"and" : [
{
"term" : {
"city" : "some city"
}
},
{
"term" : {
"food" : "some food"
}
}
]
}
}
}
然后冲洗并重复3过滤器参数:
{
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"and" : [
{
"term" : {
"city" : "some city"
}
},
{
"term" : {
"food" : "some food"
}
},
{
"term" : {
"colour" : "some colour"
}
}
]
}
}
}
我还没有对此进行过测试,但原则是合理的并且可行。