我已经找了好几天这类问题,但都没能解决。我遵循这样这样的步骤,但没有成功。
基本上,我有以下关于elasticsearch的数据:
{ title: "Black Dust" },
{ title: "Dust In The Wind" },
{ title: "Gold Dust Woman" },
{ title: "Another One Bites The Dust" }
问题是我想用“灰尘”这个词来搜索结果,我希望结果的顺序如下:
{ title: "Dust In The Wind" },
{ title: "Black Dust" },
{ title: "Gold Dust Woman" },
{ title: "Another One Bites The Dust" }
其中“灰尘”必须出现在结果的顶部。
发布Map和查询比继续解释问题本身要好。
settings: {
analysis: {
normalizer: {
lowercase: {
type: 'custom',
filter: ['lowercase']
}
}
}
},
mappings: {
_doc: {
properties: {
title: {
type: 'text',
analyzer: 'standard',
fields: {
raw: {
type: 'keyword',
normalizer: 'lowercase'
},
fuzzy: {
type: 'text',
},
},
}
}
}
}
我的问题是:
"query": {
"bool": {
"must": {
"query_string": {
"fields": [
"title"
],
"default_operator": "AND",
"query": "dust"
}
},
"should": {
"prefix": {
"title.raw": "dust"
}
}
}
}
有人能帮我吗?谢谢您!
解决方案!
我找到了答案,通过执行以下查询解决了问题:
"query": {
"bool": {
"must": {
"bool": {
"should": [
{
"prefix": {
"title.raw": {
"value": "dust",
"boost": 1000000
}
}
},
{
"match": {
"title": {
"query": "dust",
"boost": 50000
}
}
},
{
"match": {
"title": {
"query": "dust",
"boost": 10,
"fuzziness": 1
}
}
}
]
}
}
}
}
然而,在编写测试时,我发现了一个小问题。所以,我生成了一个随机变量 uuid
并将以下内容添加到数据库中:
{ title: `${uuid} A` }
{ title: `${uuid} W` }
{ title: `${uuid} Z` }
{ title: `A ${uuid}` }
{ title: `z ${uuid}` }
{ title: `Z ${uuid}` }
当我执行上面的查询查找 uuid
,我得到:
uuid Z
uuid A
uuid W
Z uuid
我的第一个目标就是 uuid
在第一个位置,但为什么z在a之前(第一和第二个结果)
1条答案
按热度按时间b91juud31#
当其他所有操作都失败时,可以使用一个普通的子字符串位置排序,如下所示:
我已经下了命令
asc
因为子串索引越低,“分数”就越高。编辑
我们得解释一下
index == -1
因此,将上面的脚本替换为: