user3096013
user3096013

Reputation: 11

Space handling in Elastic Search

If a Document (Say a merchant name) that I am searching for has no space in it and user search by adding space in it, the result won't show in elastic search. How can that be improved to get results? For example: Merchant name is "DeliBites" User search by typing in "Deli Bites", then the above merchant does not appear in results. The merchant only appears in suggestions when I have typed just "Deli" or "Deli" followed by a space or "Deli."

Upvotes: 1

Views: 1103

Answers (2)

Amit
Amit

Reputation: 32376

Adding another option, you can also use the edge n-gram tokenizer which will work in most of the cases, its simple to setup and use.

Working example on your data

Index definition

{
  "settings": {
    "analysis": {
      "filter": {
        "autocomplete_filter": {
          "type": "ngram",
          "min_gram": 1,
          "max_gram": 10
        }
      },
      "analyzer": {
        "autocomplete": { 
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "autocomplete_filter"
          ]
        }
      }
    },
    "index.max_ngram_diff" : 10
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "autocomplete", 
        "search_analyzer": "standard" 
      }
    }
  }
}

Index sample doc

{
    "title" : "DeliBites"
}

Search query

{
    "query": {
        "match": {
            "title": {
                "query": "Deli Bites"
            }
        }
    }
}

And search results

 "hits": [
            {
                "_index": "65489013",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.95894027,
                "_source": {
                    "title": "DeliBites"
                }
            }
        ]

Upvotes: 1

hamid bayat
hamid bayat

Reputation: 2179

I suggest using synonym token filter.

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-graph-tokenfilter.html

you should have a dictionary for all words that you want search. something like this:

DelitBites => Deli Bites

ipod => i pod

before implementing synonym be sure you understood all aspect of it.

https://www.elastic.co/blog/boosting-the-power-of-elasticsearch-with-synonyms

Upvotes: 0

Related Questions