fan*_*ats 3 wildcard elasticsearch
为什么以下只与完全匹配,而不是部分匹配?
body: {
query: {
filtered: {
filter: {
bool: {
should: [
{ query: { match: { "name": "*"+searchterm+"*" }}},
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
"*"+searchterm+"*"应匹配任何包含的单词searchterm.即
item1
item2
0item
Run Code Online (Sandbox Code Playgroud)
但它只匹配单词确切, searchterm即仅匹配item.为什么是这样?
如果该name字段使用默认分析器,则在分析阶段将删除星号通配符.因此,您总能获得name完全正确的结果sarchterm.您需要使用通配符查询来匹配name字段值包含的任何文档searchterm.
query: {
filtered: {
filter: {
bool: {
should: [
{
query: {
wildcard: {
"name": "*" + searchterm + "*"
}
}
}
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5417 次 |
| 最近记录: |