2012-06-13 2 views
1

Я пытаюсь сделать частичный поиск работу, поискelasticsearch nGram/edgengram частичное совпадение?

"SW" "SWE" "шведско"

должен соответствовать "Швеция"

I огляделся и просто не мог заставить его работать

Rails Code

Я использую this code от Tire repo в качестве кода шаблона.

целые слова все еще совпадают!

У меня есть reindex, а также пробовал использовать фильтр edgengram.

ответ

-2

Я не думаю, что edgengram необходимо, простой поиск префикс будет делать то, что вы описали:

Например:

{ 
    "prefix" : { "country" : "swe" } 
} 

исх: http://www.elasticsearch.org/guide/reference/query-dsl/prefix-query.html

+2

Это будет не только для swe, скорее всего, это будет более общий способ сделать это :) – skyw00lker

1

Я не developper рубин но нашел эту статью полезной: http://dev.af83.com/2012/01/19/autocomplete-with-tire.html

Нравится это sais:

Most databases handle that feature with a filter (with LIKE keyword in SQL, regular expression search with mongoDB). The strategy is simple: iterate on all results and keep only words which match the filter. This is brutal and hurts the hard drive. Elastic Search can do it too, with the prefix query. 

With a small index, it plays well. For large indexes it will be more slow and painful. 

Вы сказали:

whole words still match! 

А что вы ожидаете? Потому что ваш запрос на поле также анализируется

1

Используйте edgengram token filter. Это поможет вам получить то, что вы хотите, но не означает, что «Швеция» не должна соответствовать «Швеция», но только «Свит», «Свед» или «Швед»?

Смежные вопросы