ElasticSearch - search using abbreviations

Viewed 3031

I am trying to setup an existing/custom analyzer that enable search using abbreviations. For example, if the text field is "Bank Of America", searching for BOfA or BOA, BofA etc should match this record.

How can I do that?

2 Answers

I figure out something approaching using pattern_replace:

GET /_analyze
{
  "tokenizer": "keyword",
  "filter": [
    {
      "type": "pattern_replace",
      "pattern": "(\\B.)",
      "replacement": ""
    },
    {
      "type": "pattern_replace",
      "pattern": "(\\s)",
      "replacement": ""
    },
    "uppercase",
    {
      "type": "ngram",
      "min_gram": 3,
      "max_gram": 5
    }
  ],
  "text": "foxes jump lazy dogs"
}

which produces:

{
  "tokens": [
    {
      "token": "FJL",
      "start_offset": 0,
      "end_offset": 20,
      "type": "word",
      "position": 0
    },
    {
      "token": "FJLD",
      "start_offset": 0,
      "end_offset": 20,
      "type": "word",
      "position": 0
    },
    {
      "token": "JLD",
      "start_offset": 0,
      "end_offset": 20,
      "type": "word",
      "position": 0
    }
  ]
}
Related