prevent elasticsearch from matching target phrase multiple times in document

Viewed 12

I am an Elastic Search newbie.

How can one make elastic search rank documents that more precisely match the input string?

For example, suppose we have the query

{
    "query": {
        "match": {
            "name": "jones"
        }
    }
}

Suppose we have two documents:

Doc1: "name" : "jones" Doc2: "name" : "jones jones jones jones jones"

I want Doc1 to be ranked more highly? It is a more precise match. How can I do this?

(Hopefully, in the most general possible way -- e.g. what if everywhere above 'jones' were replaced with 'fred jones')

Perhaps there are two approaches:

  1. Maybe you can tell ES, "hey for this query a high term frequency should not be rewarded" (which seems to go against the core of ES, TF-IDF ...Because it very strongly wants to rewards a high TF (term frequency).

  2. Maybe you can tell ES "prefer shorter matches over longer ones" (maybe using script_score???)

Surprised that I can't find answers to this question elsewhere. I must be missing something very fundamental.

0 Answers
Related