I have the following search:

{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "default_operator": "AND",
          "query": "details:foo\\-bar"
        }
      },
      "filter": {
        "term": {
          "deleted": false
        }
      }
    }
  }
}



The details field is analyzed using pattern tokenizer, as so:

settings: {
  index.analysis.analyzer.letterordigit.pattern: "[^\\p{L}\\p{N}]+",
  index.analysis.analyzer.letterordigit.type: "pattern"
}


This breaks the field into tokens separated by any non-letter or 
non-numeric character. 

But the user is searching for "foo-bar" which contains a non alphanumeric 
character. I assume, but correct me if I'm wrong, that ES will apply the 
same analyzer to that string. So it is broken into two tokens: ["foo", 
"bar"], and then the default_operator kicks in and essentially turns the 
query into "details:foo AND detail:bar".

My problem is that it will match documents containing "foo xyz bar" and 
"bar xyz foo" -- in the latter case, the tokens are in the reverse order 
from the user's search. I'm fine with it matching the former, but it's a 
stretch to convince the user that the latter is intended.

The search string is provided by the user, so I can't really build a 
complex query with different query types, hence the basic querystring 
search. 

Any advice or corrections to my assumptions is appreciated!


-- 
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 elasticsearch+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elasticsearch/4a204214-f209-48dd-a13a-96463609ad7d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to