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/f56d067a-5140-4481-ab63-b31c7a6d795f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to