gpt4 book ai didi

elasticsearch - Elasticsearch仅找到附加了 “.keyword”的匹配

转载 作者:行者123 更新时间:2023-12-03 00:54:47 25 4
gpt4 key购买 nike

Elasticsearch仅找到附加了“.keyword”的匹配

我花了很多时间查询我从运行版本1.7的旧Elasticsearch实例导入的,充满流利日志条目的Elasticsearch 5实例。通过Kibana查询最简单的信息经常会超时,而我对于在哪里寻找潜在的性能问题一无所知。我正在查询的索引的Elasticsearch映射示例如下所示:

=> {"@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。

我想我的主要问题是:我怎么知道我的映射对此数据是否正确? (对于导入的数据,它们是在插入时插入数据时创建的,我假设以后会自动创建它们)

最佳答案

user.email字段是text类型。当索引到此类型的字段时,分析器会将源值拆分并将其转换为一个或多个项。每个术语都存储在索引中,以允许对该术语进行搜索。映射未为该字段指定分析器,因此使用default analyzer。要显示默认分析器输出的术语,请调用

curl -s -XGET http://localhost:9200/logstash-2017.08.15/_analyze -d'{"text": "user@example.com"}' | jq . 

按照您的示例,在 user.email字段中搜索 用户这个词可能会找到结果。
user.email.keyword子字段是 keyword类型。此类型的字段只能通过其确切值进行搜索。也就是说,搜索查询中指定的值必须与原始源值完全相等。

关于elasticsearch - Elasticsearch仅找到附加了 “.keyword”的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46061672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com