索引的映射是
{
"mappings": {
"my_type": {
"properties": {
"full_text": {
"type": "string"
},
"exact_value": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
索引的文件是
{
"full_text": "Quick Foxes!",
"exact_value": "Quick Foxes!"
}
我在" full_text"上使用简单匹配查询时注意到了像下面的字段
{
"query": {
"match": {
"full_text": "quick"
}
}
}
我看到文件是匹配的。此外,如果我使用大写,那就是" QUICK" ,作为搜索词,它显示文档是匹配的。
为什么会这样?默认情况下,tokenizer会将文本拆分为" full_text"进入"快速","狐狸"。那么匹配查询如何匹配文档中的大写值?
答案 0 :(得分:5)
因为您还没有指定哪个分析器用于" full_text"将字段放入索引映射中,然后使用默认分析器。默认值为" Standard Analyzer"。
引自ElasticSearch docs:
使用带有标准令牌过滤器,小写令牌过滤器和停止令牌过滤器的标准令牌器构建标准型分析器。
在索引中执行查询之前,ElasticSearch会将为您的字段配置的相同分析器应用于查询值。因为默认分析器在处理中使用小写令牌过滤器,然后使用"快速"或者" QUICK"或者"快速"将为您提供相同的查询,因为分析器将使用小写令牌过滤器来降低它们的结果,结果只是"快速"。