Posted same question on "stackover flow"
"http://stackoverflow.com/questions/23244796/substring-match-in-search-term-order-using-elasticsearch" but still looking for Answer.
I'm new to elasticsearch
I want to perform substring/partial word match using elastic search. I want
results to be returned in the perticular order. In order to explain my
problem I will show you how I create my index, mappings and what are the
records I use.
Creating Index and mappings:
PUT /my_index1
{
"settings": {
"analysis": {
"filter": {
"trigrams_filter": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3
}
},
"analyzer": {
"trigrams": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"trigrams_filter"
]
}
}
}
},
"mappings": {
"my_type1": {
"properties": {
"text": {
"type": "string",
"analyzer": "trigrams"
}
}
}
}
}
Bulk record insert:
POST /my_index1/my_type1/_bulk
{ "index": { "_id": 1 }}
{ "text": "men's shaver" }
{ "index": { "_id": 2 }}
{ "text": "men's foil shaver" }
{ "index": { "_id": 3 }}
{ "text": "men's foil advanced shaver" }
{ "index": { "_id": 4 }}
{ "text": "norelco men's foil advanced shaver" }
{ "index": { "_id": 5 }}
{ "text": "men's shavers" }
{ "index": { "_id": 6 }}
{ "text": "women's shaver" }
{ "index": { "_id": 7 }}
{ "text": "women's foil shaver" }
{ "index": { "_id": 8 }}
{ "text": "women's foil advanced shaver" }
{ "index": { "_id": 9 }}
{ "text": "norelco women's foil advanced shaver" }
{ "index": { "_id": 10 }}
{ "text": "women's shavers" }
Now, I want to perform search for "en's shaver". I'm searching using
follwing query:
POST /my_index1/my_type1/_search
{
"query": {
"match": {
"text":
{ "query": "en's shaver",
"minimum_should_match": "100%"
}
}
}
}
I want results to be in following sequence:
- men's shaver --> closest match with following same search keyword
order "en's shaver - women's shaver --> closest match with following same search keyword
order "en's shaver - men's foil shaver --> increased distance by 1
- women's foil shaver --> increased distance by 1
- men's foil advanced shaver --> increased distance by 2
- women's foil advanced shaver --> increased distance by 2
- men's shavers --> substring match for "shavers"
- women's shavers --> substring match for "shavers"
I'm performing following query. It is not giving me result in the order I
want:
POST /my_index1/my_type1/_search
{
"query": {
"query_string": {
"default_field": "text",
"query": "men's shaver",
"minimum_should_match": "90%"
}
}
}
--
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+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/b7d43a2d-be99-45a5-a2a3-4151dbc52292%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.