我创建一个索引(id 是 uuid):
...
"mappings": {
"_field_names": {
"enabled": true
},
"properties": {
"id": {"type": "keyword"},
...
}
}
...
我正在上传数据。此外,知道 uuid 列表,我需要从弹性中获取数据。
要求:
{
"_source": ["id", "city_code", "country_code", "name_en", "name_ru", "name_es", "name_fr", "name_it", "name_de", "name_uk"],
"query": {
"terms": {"id" : ["31bbcedb-3ca4-4de6-91b1-62683ec79a4f", "cfd24807-c758-444c-b38c-0a06dbccfe02"]}
}
}
结果是空虚。如果你提出这样的请求怎么办:
{
"_source": ["id", "city_code", "country_code", "name_en", "name_ru", "name_es", "name_fr", "name_it", "name_de", "name_uk"],
"query": {
"terms": {"id" : ["31bbcedb", "cfd24807"]}
}
}
数据将到达。他不喜欢“-”这个字符。
这是如何治疗的?
是的,ElasticSearch 中的数据默认存储在令牌中。每次您保存带有文本字段的文档时,ElasticSearch 都会将值拆分为单个单词并形成一个复杂的结构,该结构被修改为最有效的结构,以适应 api 请求。如果这些 GUID 值是索引中文档的 ID(据我所知),那么查询 ids查询应该可以工作:
PS我自己没有检查,因为。现在不可能。让我知道如果它不起作用,我们会寻找另一个请求
要在字段中搜索完全匹配,您需要将其
terms query与.keyword后缀一起使用。它也适用于文本字段,但就效率而言,这种方法对于标准文本字段非常糟糕: