ElasticSearch query_string fails to parse query with some characters
I know I am late enough but I am posting here and I hope it'll help others. As we know from the Elasticsearch documentation here ES has some reserved characters.
The reserved characters are: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
So, now you've two possible solutions to fix it. These are working perfectly for me when I encountered special character issue
Solution 1: Wrap your special characters with \\
"query": {
"bool": {
"must": [
{
"match": {
"country_code.keyword": "IT"
}
},
{
"query_string": {
"default_field": "display",
"query": "Magomadas \\(OR\\), Italy"
}
}
]
}
}
Solution 2: Use simple_query_string
with no change on your query
but it doesn't support default_field
, so you can use fields
instead.
"query": {
"bool": {
"must": [
{
"match": {
"country_code.keyword": "IT"
}
},
{
"simple_query_string": {
"fields": ["display"],
"query": "Magomadas (OR), Italy"
}
}
]
}
}
I was reading the documentation and the query_string
is more strict. The following are reserved characters: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
So, like jhilden said, I would have to escape them or use simple_query_string
instead.
Docs: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html
When using query_string
in ES it's a bit weird. You need to escape it with a double backslash.
The following fails:
GET index1/job/_search
{
"query": {
"query_string": {
"fields": ["jobNumber"],
"query": "827950 { foo"
}
}
}
The following works
GET index1/job/_search
{
"query": {
"query_string": {
"fields": ["jobNumber"],
"query": "827950 \\{ foo"
}
}
}
Note: if you were using a terms query or something else like that you would not need to escape that {