Excellent! That works perfectly. Thank you very much Mike.
On Thursday, October 30, 2014 4:21:30 PM UTC-4, Mike Maddox wrote:
>
> Jarod,
>
> The format of your analyzer is wrong. Note that you have to set the filter
> property. Use this:
>
> {
> "settings": {
> "analysis": {
> "analyzer": {
> "my_analyzer": {
> "type": "custom",
> "tokenizer": "keyword",
> "filter": "lowercase"
> }
> }
> }
> },
> "mappings": {
> "car": {
> "properties": {
> "color": {
> "type": "string",
> "analyzer": "my_analyzer"
> }
> }
> }
> }
> }
>
> On Thursday, October 30, 2014 12:52:45 PM UTC-7, Jarrod C wrote:
>>
>> Thanks Mike, it appears referencing the 'episode' instead of 'car' from a
>> previous example was the problem. That seems to have progressed me further
>> however my queries are still case sensitive despite lowercase being true.
>> Allow me to repost what I have for clarity. Thanks
>>
>> // mapping
>> curl -XPUT 'http://localhost:9200/myindex/' -d '{
>> "settings": {
>> "analysis": {
>> "analyzer": {
>> "my_analyzer": {
>> "type": "custom",
>> "tokenizer": "keyword",
>> "lowercase": true
>> }
>> }
>> }
>> },
>> "mappings": {
>> "car": {
>> "_source": {
>> "enabled": false
>> },
>> "properties": {
>> "color": {
>> "type": "string",
>> "analyzer": "my_analyzer"
>> }
>> }
>> }
>> }
>> }'
>>
>> //query matches 'Metallic RED' but not 'Metallic Red'
>> GET /myindex/car/_search
>> {
>> "query": {
>> "match": {
>> "color": "Metallic RED"
>> }
>> }
>> }
>>
>>
>> On Thursday, October 30, 2014 2:41:10 PM UTC-4, Mike Maddox wrote:
>>>
>>> Jarrod,
>>>
>>> I understand that you think the analyzer is not the problem. However,
>>> the original mapping wasn't correctly formatted so the color type was being
>>> analyzed using the default analyzer which would also cause the query to use
>>> the default analyzer as well. If you fix the syntax and then change color
>>> to use your analyzer it will work. One note, your mapping is also incorrect
>>> in that it references the "episode" type when you're actually adding data
>>> to the "car" type. Using your analyzer, it would be indexed as one lower
>>> case string. Now, your query does make a difference but if you have the
>>> analyzer set correctly, it will analyze the input string using the same
>>> analyzer that you set in the mapping. You would be better off just doing a
>>> term query or filter.
>>>
>>> Mike
>>>
>>>
>>> On Thursday, October 30, 2014 8:06:36 AM UTC-7, Jarrod C wrote:
>>>>
>>>> Thanks for the replies. Unfortunately the analyzer portion is not the
>>>> problem (I pasted the original text in the midst of experimentation).
>>>> When
>>>> I had "analyzer" : "my_analyzer" in the mapping it didn't make a
>>>> difference. I get results from the analysis query below so I assume it
>>>> was
>>>> configured properly:
>>>> GET /myindex/_analyze?analyzer=my_analyzer
>>>>
>>>> However, it does not seem to make a difference between using my custom
>>>> "my_analyzer" or using "keyword", or even using "index" : "not_analyzed".
>>>> In each case, if I search for "red" I get back all results when in fact I
>>>> only want 1.
>>>>
>>>> Perhaps my query is the problem?
>>>>
>>>> On Wednesday, October 29, 2014 8:17:40 PM UTC-4, Mike Maddox wrote:
>>>>>
>>>>> Actually, change it to "index": "not_analyzed" as shown in the JSON.
>>>>>
>>>>> On Wednesday, October 29, 2014 5:13:46 PM UTC-7, Mike Maddox wrote:
>>>>>>
>>>>>> Actually, there are two problems here. Change the analyzer to the
>>>>>> name of your custom analyzer and you are missing a curly brace to close
>>>>>> out
>>>>>> the "settings" property. Not sure why it doesn't cause an error but it
>>>>>> definitely doesn't create a mapping. You can check if there is a mapping
>>>>>> by
>>>>>> looking at: http://localhost:9200/myindex/_mapping
>>>>>>
>>>>>> Here is how it should be:
>>>>>>
>>>>>>
>>>>>> {
>>>>>> "settings": {
>>>>>> "analysis": {
>>>>>> "analyzer": {
>>>>>> "my_analyzer": {
>>>>>> "type": "custom",
>>>>>> "tokenizer": "keyword",
>>>>>> "lowercase": true
>>>>>> }
>>>>>> }
>>>>>> }
>>>>>> },
>>>>>> "mappings": {
>>>>>> "episode": {
>>>>>> "_source": {
>>>>>> "enabled": false
>>>>>> },
>>>>>> "properties": {
>>>>>> "color": {
>>>>>> "type": "string",
>>>>>> "index": "not_analyzed"
>>>>>> }
>>>>>> }
>>>>>> }
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> On Wednesday, October 29, 2014 2:38:36 PM UTC-7, Jarrod C wrote:
>>>>>>>
>>>>>>> Hello, I am trying to run a query that distinguishes between spaces
>>>>>>> in values. Let's say I have a field called 'color' in my index.
>>>>>>> Record 1
>>>>>>> has "color" : "metallic red" whereas Record 2 has "color": "metallic"
>>>>>>>
>>>>>>> I want to search for 'metallic' but NOT retrieve 'metallic red', and
>>>>>>> a search for 'metallic red' should not return 'red'.
>>>>>>>
>>>>>>> The query below works for 'metallic red' but entering 'red' returns
>>>>>>> both records. The query also appears to be bypassing Analyzers
>>>>>>> specified
>>>>>>> in the mappings (such as keyword) as they have no affect. What should
>>>>>>> I
>>>>>>> change it to instead?
>>>>>>>
>>>>>>> //Query
>>>>>>> GET /myindex/_search
>>>>>>> {
>>>>>>> "query": {
>>>>>>> "match_phrase": {
>>>>>>> "color": "metallic red"
>>>>>>> }
>>>>>>> }
>>>>>>> }
>>>>>>>
>>>>>>> //Data
>>>>>>> { "index" : { "_index" : "myindex", "_type" : "car", "_id" : "1" } }
>>>>>>> { "color" : "metallic red" }
>>>>>>> { "index" : { "_index" : "myindex", "_type" : "car", "_id" : "2" } }
>>>>>>> { "color" : "Metallic RED"}
>>>>>>> { "index" : { "_index" : "myindex", "_type" : "car", "_id" : "3" } }
>>>>>>> { "color" : "rEd" }
>>>>>>>
>>>>>>> //Mapping (no effect for query)
>>>>>>> curl -XPUT 'http://localhost:9200/myindex/' -d '{
>>>>>>> "settings" : {
>>>>>>> "analysis": {
>>>>>>> "analyzer": {
>>>>>>> "my_analyzer":{
>>>>>>> "type": "custom",
>>>>>>> "tokenizer" : "keyword",
>>>>>>> "lowercase" : true
>>>>>>> }
>>>>>>> }
>>>>>>> },
>>>>>>> "mappings" : {
>>>>>>> "episode" : {
>>>>>>> "_source" : { "enabled" : false },
>>>>>>> "properties" : {
>>>>>>> "color" : { "type" : "string", "analyzer" :
>>>>>>> "not_analyzed" }
>>>>>>> }
>>>>>>> }
>>>>>>> }
>>>>>>> }
>>>>>>> }'
>>>>>>>
>>>>>>>
>>>>>>> Thanks!
>>>>>>>
>>>>>>
--
You received this message because you are subscribed to the Google Groups
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/db21198f-6483-4919-9e7b-5509f6d5f9e6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.