ElasticSearch field queries containing slashes
If you're indexing some unanalyzed content that contains backslashes, you might find that the results you're expecting aren't returned when making queries. For instance, assume you're indexing this string
MyIndex\MyType\Classname
(which happens to be a PHP class name), into a field on your index called className
. You've indexed it unanalyzed, so ElasticSearch indexes the string without any modification. Now you want to match that value in a query. If you were to query over HTTP, your URL would look something like this:
http://localhost:9200/my_index/my_type/_search?pretty=true&q=className:MyIndex\MyType\Classname
But you wouldn't get any results; ElasticSearch requires backslashes to be escaped in order to match. So a working query would look like this:
http://localhost:9200/my_index/my_type/_search?pretty=true&q=className:MyIndex\\MyType\\Classname
If you're querying through PHP, as I am, the addslashes()
function is your friend, or even a simple str_replace()
. There may well be a nicer way to get around this, but it worked for me!
Written by Craig Marvelley
Related protips
1 Response
That's a nice tip. But first you have to integrate Elasticsearch in PHP. You can do that using Elasticsearch PHP API.