user1782357
user1782357

Reputation: 369

elasticsearch added wildcard fails query

Works as expected:

{
  "query": {
        "query_string": {
            "query": "Hofstetten-Grünau"
        }
    }
}

an added wildcard at the end delivers no results and I wonder why:

{
  "query": {
        "query_string": {
            "query": "Hofstetten-Grünau*"
        }
    }
}

how to fix it?

elasticsearch v5.3.2

This delivers results:

{
  "query": {
        "query_string": {
            "query": "Hofstetten*"
        }
    }
}

I use a single search field. The end user can freely use wildcards as they see fit. A user might type in:

so using a match query wont work out for me.

I am using Jest (Java Annotations) as Mapping, and using "default" for this field. My index mapping declares nothing special for the field:

{
    "mappings": {
        "_default_": {
            "date_detection": false,
            "dynamic_templates": [{
            }]
        }
    }
}

Upvotes: 0

Views: 102

Answers (1)

Jason Rosendale
Jason Rosendale

Reputation: 821

Adding the wildcard "*" at the end of your query string is causing the query analyzer to interpret the dash between "Hofstetten" and "Grünau" as a logical NOT operator. So you're actually searching for documents that contain Hofstetten but do NOT contain Grünau.

You can verify this by doing the following variations of your search:

"query": "Hofstetten-XXXXX" #should not return results
"query": "Hofstetten-XXXXX*" #should return results

To fix this I would recommend using a match query instead of a query_string query:

{"query": {"match": { "city": "Hofstetten-Grünau" }}}'

(with whatever your appropriate field name is in place of city).

Upvotes: 0

Related Questions