我有一个名为“ tag”的字段,该字段在elasticsearch中被分析(默认行为)。“标签”字段可以有一个单词或逗号分隔的字符串来存储多个标签。例如。“节日,快速,盛宴”。现在,例如,如果标签为“节日”,在索引之前,我将其转换为小写(忽略大小写),并将其索引为“节日”。
现在,如果按如下所述使用所有大写字母的匹配查询进行搜索,则结果会很好(如预期)。
{
"query": {
"match": {
"tag": "FESTIVE"
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我按如下所述执行通配符查询,则不会得到结果:(
{
"query": {
"wildcard": {
"tag": {
"value": "F*"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将通配符搜索中的值字段更改为“ f *”而不是“ F *”,那么我会得到结果。
有谁知道通配符查询为什么区分大小写?
通配符查询属于此类,term level queries因此不予分析。来自文档
匹配具有与通配符表达式匹配的字段的文档(未分析)
通过查询字符串query,您将获得预期的结果,它将lowercase是术语,因为默认情况下为lowercase_expanded_termstrue。尝试这个
GET your_index/_search
{
"query": {
"query_string": {
"default_field": "tag",
"query": "F*"
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
2723 次 |
| 最近记录: |