Any idea why single quotes work?

This works but doesn't match the lucene query syntax.

curl -XPOST "$url/$defaultIndex/example/_search?pretty=true" -d '
{
  "query": {
    "query_string": {
      "query": "name:''exampleof bug''"
    }
  }
}
'

On Thursday, August 21, 2014 10:09:29 AM UTC-7, Ivan Brusic wrote:
>
> The query string query is a phrase query "\"exampleof bug\""
> The term query is looking for a single token "exampleof bug"
>
> The query parser will not use your tokenizer to parse the phrase. It will 
> tokenize based on whitespace and then apply the filters to each term. Your 
> index does not contain the token "exampleof" and your analyze API example 
> confirms it. The issue of the query parser is a long standing one in Lucene.
>
> -- 
> Ivan
>
>
> On Thu, Aug 21, 2014 at 9:56 AM, ben <[email protected] <javascript:>> 
> wrote:
>
>> But the query is this...
>>
>> name:"exampleof bug"
>>
>> This should find an exact match in the field name. That exact match token 
>> exists.
>>
>> The syntax for lucene under "Fields" section shows a double quote is the 
>> correct character for this. 
>> http://lucene.apache.org/core/2_9_4/queryparsersyntax.html The term 
>> query is found by query_string when using single quotes, but that doesn't 
>> match lucene query documentation.
>>
>> Thanks!
>>
>> On Thursday, August 21, 2014 9:52:16 AM UTC-7, Ivan Brusic wrote:
>>
>>> I suspect the issue is the way the query parser works. The query phrase 
>>> "exampleof bug" will be parsed into a query for the tokens "exampleof" and 
>>> "bug" that are adjacent to each other. The issue is that you do not have 
>>> two such tokens, instead you have a token with the value "exampleof bug", 
>>> which is a single token with a space in it. According to Lucene, they are 
>>> not the same thing. You would need to create an analyzer that would create 
>>> the tokens "exampleof" and "bug".
>>>
>>> Cheers,
>>>
>>> Ivan
>>>
>>>
>>> On Thu, Aug 21, 2014 at 8:47 AM, ben <[email protected]> wrote:
>>>
>>>> Also meant to include this in the script.
>>>>
>>>> echo "query_string query using singe quote which does not match lucene 
>>>> query documentation"
>>>> curl -XPOST "$url/$defaultIndex/example/_search?pretty=true" -d '
>>>> {
>>>>   "query": {
>>>>     "query_string": {
>>>>       "query": "name:''exampleof bug''"
>>>>     }
>>>>   }
>>>> }
>>>> '
>>>>
>>>> On Thursday, August 21, 2014 8:39:14 AM UTC-7, ben wrote:
>>>>>
>>>>> I have attached a short bash script to recreate the situation. I have 
>>>>> a fairly simple custom analyzer that I want to break on camel case so 
>>>>> lowercase is last. Using the _analyze endpoint I can see the token I am 
>>>>> searching for is generated by the analyzer, however searching for it with 
>>>>> query_string yields a different result that a term query. I put comments 
>>>>> in 
>>>>> the script to explain in more detail.
>>>>>
>>>>> Thanks for any help!
>>>>>
>>>>> #!/bin/sh
>>>>>
>>>>> url="http://localhost:9200";
>>>>> defaultIndex="example"
>>>>>
>>>>> echo "Start over...this will fail the first time the script is run 
>>>>> since the index will not exist"
>>>>> curl -XDELETE "$url/$defaultIndex?refresh=true"
>>>>>
>>>>> echo "Create index with custom analyzer"
>>>>> curl -XPUT "$url/$defaultIndex" -d '{
>>>>>  "index": {
>>>>>             "analysis": {
>>>>> "filter": {
>>>>>  "my_worddelim": {
>>>>> "type": "word_delimiter",
>>>>> "split_on_case_change": true,
>>>>>  "preserve_original": true
>>>>> }
>>>>> },
>>>>>                     "analyzer": {
>>>>>  "my_analyzer": {
>>>>> "type":         "custom",
>>>>> "char_filter":  [ "html_strip" ],
>>>>>  "tokenizer":    "keyword",
>>>>> "filter":       [ "stop", "my_worddelim", "lowercase" ]
>>>>>  }
>>>>>                     }
>>>>>             }
>>>>>     }
>>>>> }'
>>>>>
>>>>> echo
>>>>>
>>>>> curl -XPUT "$url/$defaultIndex/example/_mapping" -d '{
>>>>>     "example" : {
>>>>>         "properties" : {
>>>>>             "name": {
>>>>>                 "type" : "multi_field",
>>>>>                 "path": "just_name",
>>>>>                 "fields" : {
>>>>>                     "name": { "type": "string", "analyzer": 
>>>>> "my_analyzer" },
>>>>>     "sample" : {"type" : "string", "index" : "not_analyzed" },
>>>>>                     "sample_name" : {"type" : "string", "analyzer": 
>>>>> "my_analyzer" }
>>>>>                 }
>>>>>             }
>>>>> }
>>>>>     }
>>>>> }'
>>>>>
>>>>> echo "Shows the lowercase token exampleofbug is generated"
>>>>> curl -XGET "$url/$defaultIndex/_analyze?analyzer=my_analyzer&pretty=
>>>>> true" -d 'ExampleOf Bug'
>>>>>
>>>>> echo "Post the document (haven't tried with non-bulk request)"
>>>>> curl -XPOST "$url/$defaultIndex/example/_bulk?refresh=true" -d '
>>>>> { "index" :  {"_index":"example","_type":"example","_id":"2169167","_
>>>>> version_type":"internal","_timestamp":0} }
>>>>> {"name":"ExampleOf Bug"}
>>>>> '
>>>>>
>>>>> echo
>>>>>
>>>>> echo "query_string query is unable to find token in the name field 
>>>>> even though the path is just_name. i also tried escaping space per 
>>>>> documentation and it fails to parse"
>>>>> curl -XPOST "$url/$defaultIndex/example/_search?pretty=true" -d '
>>>>> {
>>>>>   "query": {
>>>>>     "query_string": {
>>>>>       "query": "name:\"exampleof bug\""
>>>>>     }
>>>>>   }
>>>>> }
>>>>> '
>>>>>
>>>>> echo
>>>>>
>>>>> echo "Can successfully find token in name field that I was unable to 
>>>>> find with query_string"
>>>>> curl -XPOST "$url/$defaultIndex/example/_search?pretty=true" -d '
>>>>> {
>>>>>   "query": {
>>>>>     "term": {
>>>>>       "name": "exampleof bug"
>>>>>     }
>>>>>   }
>>>>> }
>>>>> '
>>>>>
>>>>>
>>>>>  -- 
>>>> 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/fb920c7a-dce5-4272-8b80-1f148e96f8ae%
>>>> 40googlegroups.com 
>>>> <https://groups.google.com/d/msgid/elasticsearch/fb920c7a-dce5-4272-8b80-1f148e96f8ae%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>  -- 
>> 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] <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/elasticsearch/f167607d-32da-497e-ba09-bb77cfd0784e%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/elasticsearch/f167607d-32da-497e-ba09-bb77cfd0784e%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
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/8614174f-f450-4981-9af6-8956033a9378%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to