ElasticSearch - 使用缩写搜索

Kir*_*ddy 5 elasticsearch nest

我正在尝试设置一个现有/自定义分析器,该分析器可以使用缩写进行搜索。例如,如果文本字段是“美国银行”,则搜索 BOfA 或 BOA、BofA 等应匹配此记录。

我怎样才能做到这一点?

use*_*217 2

您可能可以将同义词过滤器标记用于自定义分析器。

例如以下映射

{
"settings": {
    "analysis": {
        "analyzer": {
            "my_analyzer": {
                "tokenizer": "standard",
                "filter": ["lowercase", "synonym_filter"]
            }
        },
        "filter": {
            "synonym_filter": {
                "type": "synonym",
                "synonyms": [
                    "bank of america,boa"
                ],
                "expand": true
            }
        }
    }
},
"mappings": {
    "document": {
        "properties": {
            "text": {
                "type": "text",
                "analyzer": "my_analyzer",
                "fielddata": true
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

}

当然,您可以向列表中添加更多内容或使用同义词文件。

对于查询用例 BOfA 或 BOA, BofA - 可以使用两种方法。

1) 这些可能的组合的更多同义词

 "synonyms": [
                    "bank of america,boa"
                    "bank of america,bofa"
                ]
Run Code Online (Sandbox Code Playgroud)

2)或者保持缩写完整并使用模糊查询

{
  "query": {
    "match": {
      "text" : {
        "query": "bofa",
        "fuzziness": 2
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

您将需要同义词来为 ES 提供缩写。