首页 > 解决方案 > 当存在品牌术语匹配时搜索产品索引并优先考虑结果

问题描述

在谈到弹性搜索(6.5)时,我是一个新手,所以如果我以前无法找到这个问题,也许是术语不好,请提前道歉?

我正在尝试从我的索引中返回与一个简单的广义术语匹配的结果,但是如果索引中的某个品牌匹配,我希望将其播种到结果的顶部。我已经尝试了许多不同的查询组合,但到目前为止我的进展如下:

    "index": "products",
    "from": 0,
    "size": 300,
    "body": {
        "query": {
            "bool": {
                "should": [{
                    "function_score": {
                        "query": {
                            "multi_match": {
                                "query": "jacket bontrager",
                                "fields": ["title", "brand"],
                                "operator": "and"
                            }
                        },
                        "boost": 3
                    }
                }, {
                    "function_score": {
                        "query": {
                            "multi_match": {
                                "query": "jacket bontrager",
                                "fields": ["title", "brand"],
                                "fuzziness": 1,
                                "operator": "and"
                            }
                        },
                        "boost": 2
                    }
                }, {
                    "function_score": {
                        "query": {
                            "multi_match": {
                                "query": "bontrager",
                                "fields": ["brand"],
                                "fuzziness": 1,
                                "operator": "and"
                            }
                        },
                        "boost": 3
                    }
                }]
            }
        }
    }
}

为什么不考虑升压数字?

结果顺序是这样的:

  1. 耐力夹克
  2. 狐狸夹克
  3. Bontrager 夹克

我在正确的轨道附近吗?

标签: elasticsearchelasticsearch-6.5

解决方案


推荐阅读