首页 > 解决方案 > 在 Elasticsearch 中,如何优先考虑短语中的某些单词

问题描述

我在 Elastic Search 7.4 中有一个名为 product 的索引

产品有一个名为标题的字段。

如果我想搜索 blue watch 的所有标题,我想查看 blue watch 或 watch 的所有结果。我不想看到像蓝色 T 恤这样的结果。我想优先考虑观察这个词。

即如何确定搜索短语中的名词并赋予它比相应形容词更高的优先级。

标签: elasticsearch

解决方案


在elasticsearch中使用boost参数
boost参数赋予单词“watch”比“blue”更高的优先级

{
    "query": {
        "bool": {
            "should": [{
                    "match": {
                        "title": "blue",
                        "boost": 1

                    }
                },
                {
                    "match": {
                        "title": "watch",
                        "boost": 10
                    }
                }
            ]
        }
    }
}

如果您希望单词“watch”成为强制匹配,只需将其放入 must block 并将“blue”放入 should block 以使其可选

{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "title": "watch",
                    "boost": 10
                }
            },
            "should": {
                "match": {
                    "title": "blue",
                    "boost": 1

                }
            }


        }
    }
}

推荐阅读