Elasticsearch-搜索其他国家/地区代码

时间:2018-10-15 23:36:49

标签: elasticsearch

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

  • 一些记录说英国,另一些说GB
  • 一些记录说美国和其他一些美国
  • 列表继续。.

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

您正在寻找的是一种使令牌了解可能具有或未具有相似字符的相似令牌的方法。只有使用public partial class Response { [JsonProperty("statusCode")] public long StatusCode { get; set; } [JsonProperty("status")] public string Status { get; set; } [JsonProperty("data")] public Employee[] Data { get; set; } } public partial class Employee { [JsonProperty("empName")] public string EmpName { get; set; } [JsonProperty("empCode")] public long EmpCode { get; set; } [JsonProperty("empId")] public string EmpId { get; set; } } var ResponseJSON= JsonConvert.DeserializeObject<Response>(normalJson); 才有可能。

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"
}

请参阅其官方documentation以了解更多信息。希望这会有所帮助!