【发布时间】:2018-07-20 18:07:06
【问题描述】:
我有一个来自美国农业部的 250,000 种食物的数据库,复制到 Elasticsearch 中。人们按名称搜索食物。对于诸如“面粉”之类的某些查询,我希望始终首先出现一种特定的面粉。我想为大约 100 个常见项目执行此操作。大多数项目都可以正常搜索结果。
但是,对于其他查询,例如“杏仁粉”,我希望始终首先显示不同的结果。 (每种面粉种类繁多,我需要控制哪种面粉最适合给定的通用查询)。
是否只有当搜索查询匹配正则表达式时才能提升结果?例如,我的食品项目的弹性搜索文档还可以包含必须匹配搜索查询的正则表达式,以便进行提升。 示例文档:
{
"name": "Pork, cured, salt pork, raw",
"boostRegex": "/^pork$/i"
}
否则,是否只有当搜索查询与文档中的关键字完全匹配时才能提升结果?我尝试了这种方法,但我似乎无法使 boostKeyword 精确匹配工作。例如,如果一项是 boostKeyword:“almond flour”,另一项是 boostKeyword:“coconut flour”,并且搜索查询是“flour”——如果 boost 关键字匹配,两者都会得到提升。 示例:
{
"name": "Flours, almond, blanched",
"boostKeyword": "almond flour"
},
{
"name": "Flours, coconut, fine",
"boostKeyword": "coconut flour"
},
我在这个问题上使用的示例查询
"query": {
"bool": {
"must": {
"match": {
"name": searchQuery
}
},
"should" : [
{
"match" : {
"boostKeyword" : {
"query" : searchQuery,
"boost": 10
}
}
}
]
}
}
【问题讨论】:
标签: elasticsearch