Reverse Search in ElasticSearch Index

Viewed 30

How can I reverse look up in elastic index to get result?

for e.g. I want to search email childabc@gmail.com elastic index which have keywords document {"item"} with data {"abc", "xyz", "amj"}

I want to serch "abc" of elastic data that is substring of email value childabc@gmail.com.

I already tried serching on google or for existing question, but didn't get more clarity with them.

1 Answers

You can use the ngram tokenizer for your use-case, you need to define you index setting and mapping as below:

{
    "settings": {
        "index": {
            "analysis": {
                "analyzer": {
                    "custom_analyzer": {
                        "filter": [
                            "lowercase"
                        ],
                        "tokenizer": "ngram",
                        "min_gram" : 2,
                        "max_gram" : 3
                    }
                }
            },
            "max_ngram_diff" : 10
        }
    },
    "mappings": {
        "properties": {
            "item": {
                "type": "text",
                "analyzer": "custom_analyzer"
            }
        }
    }
}

And than index your documents

{
    "item" : "abc"
}

{
    "item" : "xyz"
}

Now below search query returns your expected result

{
    "query" : {
        "match" : {
            "item" : "childabc@gmail.com"
        }
    }
}

Search Result

 "hits": [
            {
                "_index": "72961311",
                "_type": "_doc",
                "_id": "1",
                "_score": 5.545177,
                "_source": {
                    "item": "abc"
                }
            }
        ]
Related