I am using laravel 4.2. my database is mongodb. I have a table called products and a field in my db which is called brand that has a value of ABC in uppercase.
When using this query ['term' => ['brand' => 'ABC']] the result set is empty.
But when i tried using this ['term' => ['brand' => 'abc']] it is actually working and returning all the products with brand = 'ABC'.
My question is why elasticsearch cannot find uppercase letters?
This is because your brand field is analyzed and thus ABC gets tokenized and indexed as abc, hence why a search for the term abc returns hits while ABC doesn't.
In order to change this behavior you may create a sub-field for your brand field that is not_analyzed and you'll be able to search for the uppercase form as well.
curl -XPUT localhost:9200/my_index/my_type/_mapping -d '{
"properties": {
"brand": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}'
If you run the command above and re-index your data, you'll then be able to search for
['term' => ['brand.raw' => 'ABC']]
Note that you may also use match queries (see below) on your brand field and they'll return matches.
['match' => ['brand' => 'abc']]
['match' => ['brand' => 'ABC']]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With