In the ES documentation there is a list of reserved characters.
I'm looking for the unit tests that test reserved characters inside a
query_string query.
Could someone kindly point me in the right direction?
Thanks!
If you need to use any of the characters which function as operators in
your query itself (and not as operators), then you should escape them with
a leading backslash. For instance, to search for (1+1)=2, you would need to
write your query as (1+1)=2.
Failing to escape these special characters correctly could lead to a syntax
error which prevents your query from running.
Watch this space
A space may also be a reserved character. For instance, if you have a
synonym list which converts "wi fi" to "wifi", a query_string search for "wi
fi" would fail. The query string parser would interpret your query as a
search for "wi OR fi", while the token stored in your index is actually
"wifi". Escaping the space will protect it from being touched by the query
string parser: "wi\ fi".
More info...trying to figure out why this query throws exception.
org.elasticsearch.search.SearchParseException: [example][1]:
from[-1],size[-1]: Parse Failure [Failed to parse source [
{
"query": {
"query_string": {
"query": "name:exampleof\ bug"
}
}
}
]]
at
org.elasticsearch.search.SearchService.parseSource(SearchService.java:664)
at
org.elasticsearch.search.SearchService.createContext(SearchService.java:515)
at
org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:487)
at
org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:256)
at
org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:206)
at
org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:203)
at
org.elasticsearch.search.action.SearchServiceTransportAction$23.run(SearchServiceTransportAction.java:517)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.elasticsearch.index.query.QueryParsingException: [example]
Failed to parse
at
org.elasticsearch.index.query.IndexQueryParserService.parse(IndexQueryParserService.java:270)
at
org.elasticsearch.index.query.IndexQueryParserService.parse(IndexQueryParserService.java:263)
at
org.elasticsearch.search.query.QueryParseElement.parse(QueryParseElement.java:33)
at
org.elasticsearch.search.SearchService.parseSource(SearchService.java:648)
... 9 more
Caused by: org.elasticsearch.common.jackson.core.JsonParseException:
Unrecognized character escape ' ' (code 32)
at [Source: [B@685c9be8; line: 5, column: 33]
at
org.elasticsearch.common.jackson.core.JsonParser._constructError(JsonParser.java:1419)
at
org.elasticsearch.common.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:508)
at
org.elasticsearch.common.jackson.core.base.ParserMinimalBase._handleUnrecognizedCharacterEscape(ParserMinimalBase.java:485)
at
org.elasticsearch.common.jackson.core.json.UTF8StreamJsonParser._decodeEscaped(UTF8StreamJsonParser.java:2924)
at
org.elasticsearch.common.jackson.core.json.UTF8StreamJsonParser._finishString2(UTF8StreamJsonParser.java:2209)
at
org.elasticsearch.common.jackson.core.json.UTF8StreamJsonParser._finishString(UTF8StreamJsonParser.java:2165)
at
org.elasticsearch.common.jackson.core.json.UTF8StreamJsonParser.getText(UTF8StreamJsonParser.java:279)
at
org.elasticsearch.common.xcontent.json.JsonXContentParser.text(JsonXContentParser.java:85)
at
org.elasticsearch.index.query.QueryStringQueryParser.parse(QueryStringQueryParser.java:131)
at
org.elasticsearch.index.query.QueryParseContext.parseInnerQuery(QueryParseContext.java:234)
at
org.elasticsearch.index.query.IndexQueryParserService.innerParse(IndexQueryParserService.java:342)
at
org.elasticsearch.index.query.IndexQueryParserService.parse(IndexQueryParserService.java:268)
... 12 more
On Thursday, August 21, 2014 10:56:24 AM UTC-7, ben wrote:
In the ES documentation there is a list of reserved characters.
I'm looking for the unit tests that test reserved characters inside a
query_string query.
Could someone kindly point me in the right direction?
Thanks!
If you need to use any of the characters which function as operators in
your query itself (and not as operators), then you should escape them with
a leading backslash. For instance, to search for (1+1)=2, you would need
to write your query as (1+1)=2.
Failing to escape these special characters correctly could lead to a
syntax error which prevents your query from running.
Watch this space
A space may also be a reserved character. For instance, if you have a
synonym list which converts "wi fi" to "wifi", a query_string search for "wi
fi" would fail. The query string parser would interpret your query as a
search for "wi OR fi", while the token stored in your index is actually
"wifi". Escaping the space will protect it from being touched by the
query string parser: "wi\ fi".
In the unit tests for the jackson json library not all characters noted in
the ES documentation are tested. Shouldn't ES test the character escaping?
On Thursday, August 21, 2014 10:56:24 AM UTC-7, ben wrote:
In the ES documentation there is a list of reserved characters.
I'm looking for the unit tests that test reserved characters inside a
query_string query.
Could someone kindly point me in the right direction?
Thanks!
If you need to use any of the characters which function as operators in
your query itself (and not as operators), then you should escape them with
a leading backslash. For instance, to search for (1+1)=2, you would need
to write your query as (1+1)=2.
Failing to escape these special characters correctly could lead to a
syntax error which prevents your query from running.
Watch this space
A space may also be a reserved character. For instance, if you have a
synonym list which converts "wi fi" to "wifi", a query_string search for "wi
fi" would fail. The query string parser would interpret your query as a
search for "wi OR fi", while the token stored in your index is actually
"wifi". Escaping the space will protect it from being touched by the
query string parser: "wi\ fi".
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.