【发布时间】:2017-09-06 07:01:45
【问题描述】:
Elasticsearch 只查找附加了“.keyword”的匹配项
我在查询一个充满流利日志条目的 elasticsearch 5 实例时遇到了麻烦,这些日志条目是我从运行版本 1.7 的旧 elasticsearch 实例导入的。通过 Kibana 查询最简单的事情经常超时,我完全不知道该去哪里调查潜在的性能问题。我正在查询的索引的弹性搜索映射示例如下所示:
=> {"@log_name"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}},
"@timestamp"=>{"type"=>"date"},
"@version"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}},
"action"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}},
"api"=>{"type"=>"boolean"},
"controller"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}},
"db"=>{"type"=>"float"},
"duration"=>{"type"=>"float"},
"error"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}},
"filtered_params"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}},
"user"=>
{"properties"=>
{"email"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}},
"snowflake_id"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}},
"snowflake_uid"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}},
"type"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}},
...
有了这个,我可以使用curl 查询索引,返回找到的文档总数:
curl -s -XGET 'localhost:9200/logstash-2017.08.15/_search?pretty' -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"should": [
{
"term": {
"user.email": "user@example.com"
}
}
]
}
}
}
' | jq ".hits.total | length"
0
表示找到 0 个文档。 然而,如果我将 user.email 替换为 user.email.keyword,查询返回的 total 数字为 40。
我想我的主要问题是:我如何知道我的映射对于这些数据是否正确? (对于导入的数据,它们是在插入时插入数据时创建的,我假设以后会自动创建它们)
【问题讨论】:
标签: elasticsearch elasticsearch-5