ElasticSearch自动筛选

时间:2020-02-12 23:21:29

标签: elasticsearch filter elasticsearch-query

我有一个查询,用户可以通过两个字段brandname搜索计算机列表。我在名称字段上使用ngram搜索,以便找到类似的匹配项。我希望我的查询以某种方式工作,如果brand列上有匹配项,我想按匹配的品牌自动过滤。假设我有一个品牌“ Walmart”,有人输入了“ Walmart自行车”。我希望该查询确保所有返回的记录都具有“ Walmart”品牌。但是,如果用户仅搜索“自行车”,那么我将不希望应用任何过滤器。这是我当前的查询,允许手动过滤,但不会自动选择过滤器。

是否会要求对品牌列表进行原始查询,然后对包含过滤器的实际产品进行另一查询?

{
    query: {

    function_score: {
        query:{
            bool: {
                must: {
                        multi_match:{
                             fields: ['name^10', 'name.ngram^5',"brand.name^10", "brand.name.ngram^5"],
                             type: "most_fields", #was bool_prefix
                             query: "#{params[:q]}",
                         }
                },
                should: ranges[:must],
                filter:{
                    bool:{
                        must: filters
                     }
                }
            }
    },field_value_factor:{
        field: "popularity",
        modifier: "log1p",
        factor: 1
    },
    boost_mode: "sum"
    }
}

0 个答案:

没有答案