我有一个名为“tag”的字段,在elasticsearch中进行分析(默认行为)。 “tag”字段可以有一个单词或逗号分隔的字符串来存储多个标签。例如。 “节日,快速,盛宴”。 现在,例如,如果标签是“节日”,则在编制索引之前我将其转换为小案例(忽略区分大小写)并将其编入索引为“节日”。
现在如果我使用匹配查询搜索所有大写字母,如下所述,我得到的结果很好(正如预期的那样)。
{
"query": {
"match": {
"tag": "FESTIVE"
}
}
}
但如果我按照下面提到的那样进行通配符查询,我就不会得到结果:(
{
"query": {
"wildcard": {
"tag": {
"value": "F*"
}
}
}
}
如果我将通配符搜索中的值字段更改为“f *”而不是“F *”,那么我会得到结果。
有没有人知道为什么通配符查询表现区分大小写?
答案 0 :(得分:5)
Wildcard queries,属于term level queries
,因此未分析。来自文档
匹配具有与通配符表达式匹配的字段的文档(不是 分析的)
您将获得query string query的预期结果,lowercase
这些条款,因为默认情况下lowercase_expanded_terms
为真。试试这个
GET your_index/_search
{
"query": {
"query_string": {
"default_field": "tag",
"query": "F*"
}
}
}
希望这有帮助!