elasticsearch - Elasticsearch - 搜索替代国家代码
问题描述
我有一个名为“countryCode”的文档。我有一个术语查询来搜索它的关键字值。但有一些问题:
- 一些记录说英国,另一些记录说英国
- 一些记录说美国和其他一些美国
- 而这样的例子不胜枚举..
我可以指示我的索引以某种方式处理所有这些变化,而不是我必须扩展我的查询过滤器上的术语吗?
解决方案
您正在寻找的是一种让您的令牌理解可能具有或不具有相似字符的相似令牌的方法。这只能使用synonyms
.
Elasticsearch
为您提供配置synonyms
并让您的查询使用这些synonyms
并相应地返回结果。
我已经使用custom analyzer
using配置了一个字段synonym token filter
。我创建了一个示例映射和查询,以便您可以使用它并查看它是否符合您的需求。
映射
PUT my_index
{
"settings": {
"analysis": {
"filter": {
"my_synonym_filter": {
"type": "synonym",
"synonyms": [
"usa, us",
"uk, gb"
]
}
},
"analyzer": {
"my_synonyms": {
"tokenizer": "standard",
"filter": [
"lowercase",
"my_synonym_filter"
]
}
}
}
},
"mappings": {
"mydocs": {
"properties": {
"name": {
"type": "text",
"analyzer": "my_synonyms"
}
}
}
}
}
样本文件
POST my_index/mydocs/1
{
"name": "uk is pretty cool country"
}
当您使用以下查询时,它也会返回上述文档。
询问
GET my_index/mydocs/_search
{
"query": {
"match": {
"name": "gb"
}
}
}
请参阅他们的官方文档以了解更多信息。希望这可以帮助!
推荐阅读
- c - 在运行时 linux 确定 cpu 架构?
- flutter - 输入焦点时颤动InAppWebView无法滚动
- automation - cypress 中的环境访问凭证
- r - 如何对来自同一样本的多个文件应用函数并将它们组合起来?
- cmd - 有没有办法使用 cmd 从多个 .txt 文件中提取一行?
- laravel - Dropzonejs 对象对象错误。我该如何解决?
- python - 从 Python 验证码访问 Google Scholar 的问题
- apache-camel - Zipkin trace id 在 producerTemplate 上丢失
- json - 有没有办法解析雪花中的多行 json 表?
- javascript - 如何在 fullcalendar 3.1 的更新\删除对话框中显示保存的日期