lucene - Using wildcard and required operator in an Elasticsearch search -
we have various rows inside our elasticsearch index contain text
"... 2% milk ...".
user enters query "2% milk" search field , transform internally query
title:(+milk* +2%*)
because terms should required , possibly interested rows contain "2% milkfat".
this query above return 0 hits. changing query
title:(+milk* +2%)
returns reasonable results. why '*' operator in first query not work?
unless set mapping, "%" sign removed in tokenization process. "2% milk" turned tokens 2
, milk
.
when search "2%*" looks tokens like: 2%
, 2%a
, 2%b
, etc... , not match indexed tokens, giving no hits.
when search "2%", go through same tokenization process @ index-time (you can specify this, default tokenization same) , looking documents matching token 2
, give hit.
you can read more analysis/tokenization process here , can set analysis want defining custom mapping
good luck!
Comments
Post a Comment