弹性搜索 - 搜索替代国家/地区代码



我有一个文档,其中包含一个名为"countryCode"的字段。我有一个术语查询,用于搜索它的关键字值。但是有一些问题:

  • 一些记录说英国,另一些说GB
  • 一些
  • 记录说美国和其他一些美国
  • 这样的例子不胜
  • 枚举..

我是否可以指示我的索引以某种方式处理所有这些变体,而不必扩展查询筛选器上的术语?

您正在寻找一种让您的代币理解可能具有也可能没有相似字符的类似代币的方法。这只能使用synonyms.

Elasticsearch提供配置synonyms,并让查询使用这些synonyms并相应地返回结果。

我已经使用custom analyzer配置了一个字段,并使用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"
}
}
}

请参阅他们的官方文档以了解更多信息。希望这有帮助!

在 ES 本身内处理而不使用 logstash,我建议使用带有 gsub 处理器的简单摄取管道来更新其位置的字段

{
"gsub": {
"field": "countryCode",
"pattern": "GB",
"replacement": "UK"
}
}

https://www.elastic.co/guide/en/elasticsearch/reference/master/gsub-processor.html

最新更新