我的设置:
我有一些名为“Apple”,“Apple delicous”的文件,......
这是我的疑问:
GET p_index/_search
{
"query": {
"bool": {
"should": [
{"match": {
"name": "apple"
}},
{ "fuzzy": {
"name": "apple"
}}
]
}
}
}
我想要实现,首先显示完全匹配,然后显示模糊匹配:
其次,我想知道如果我只在搜索中输入应用程序,我没有得到任何结果:
GET p_index/_search
{
"query": {
"bool": {
"should": [
{"match": {
"name": "app"
}},
{ "fuzzy": {
"name": "app"
}}
]
}
}
}
答案 0 :(得分:0)
这里有两个问题。
1)要为完全匹配提供更高的分数,您可以尝试将"index" : "not_analyzed"
添加到name
字段中。
name: {
type: 'string',
"fields": {
"raw": {
"type": "string",
"index" : "not_analyzed" <--- here
}
}
}
之后,您的查询将如下所示
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "apple"
}
},
{
"match": {
"name.raw": "apple"
},
"boost": 5
}
]
}
}
}
这将为&#34; apple&#34;提供更高的分数。而不是&#34; apple delicous&#34;
2)为了更好地理解fuzziness
,您应该阅读this和this条款。
来自文档
模糊参数可以设置为AUTO,从而产生 遵循最大编辑距离:
- 0表示一个或两个字符的字符串
- 1表示三个,四个或五个字符的字符串
- 2表示超过五个字符的字符串
因此,fuzzy query
没有为 app 返回 apple 的原因是fuzziness
即edit distance
之间的fuzziness
为2单词,因为&#34; app&#34;只有三个字母的单词,{
"query": {
"fuzzy": {
"name": {
"value": "app",
"fuzziness": 2
}
}
}
}
值为1.您可以通过以下查询获得所需的结果
{
"query": {
"fuzzy": {
"name": {
"value": "appl"
}
}
}
}
我真的不建议使用此查询,因为它将返回奇怪的结果,上面的查询将返回 cap,arm,pip 以及许多其他单词,因为它们在编辑距离2内。
这样可以更好地查询
new Date
它将返回苹果。
我希望这会有所帮助。
答案 1 :(得分:0)
我认为,这将为您提供帮助。
{"query":{"bool":{"must":[{"function_score":{"query":{"multi_match":{"query":"airetl","fields":["brand_lower"],"boost":1,"fuzziness":Auto,"prefix_length":1}}}}}]}}