首页 > 解决方案 > Elasticsearch - 搜索替代国家代码

问题描述

我有一个名为“countryCode”的文档。我有一个术语查询来搜索它的关键字值。但有一些问题:

我可以指示我的索引以某种方式处理所有这些变化,而不是我必须扩展我的查询过滤器上的术语吗?

标签: elasticsearch

解决方案


您正在寻找的是一种让您的令牌理解可能具有或不具有相似字符的相似令牌的方法。这只能使用synonyms.

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

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

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


推荐阅读