弹性搜索NEST - 如何在搜索中使用多级过滤器

时间:2014-03-17 14:38:54

标签: elasticsearch nest

我希望在Elastic Search中使用多个级别的过滤器来使用NEST API来派生结果集。是否可以查询另一个过滤器的结果......?如果是,我可以在多个级别中执行此操作吗?

我的要求就像允许用户选择/取消选择各个字段的选项。

示例:我的索引中共有1000个文档' people'。可能有3个ListBox,1)城市2)最喜欢的食物3)最喜欢的颜色。如果用户选择城市,则过滤掉600个文档。在这600份文件中,我想过滤最喜欢的食物,这可能会产生大约300份文件。现在进一步我想用resp过滤。最喜欢的电影,从以前派生的300个文件中检索50个文件。

1 个答案:

答案 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"
                    }
                }
            ]
        }
    }
}

我还没有对此进行过测试,但原则是合理的并且可行。