Используя django-haystack +Elasticsearch, как я могу искать подмножества слова?
Если я ввожу запрос "apple", я хочу получить результаты, такие как "xyzapplexyz","apple", "applexyz", а НЕ как "app" или "appl". Но то, что я получаю, это "applexyz", "приложение" и т. Д.
Я использовал поле EdgeNgram, и я попытался сделать запрос, используя следующее: -
1 - >> SearchQuerySet().all().autocomplete(authors=query)
2 - >> SearchQuerySet().all().filter(authors=query)
3 - >> SearchQuerySet().all().filter(content=query)
4 - >> SearchQuerySet().all().autocomplete(content=query)
Но ни один из них не дает требуемых результатов. Как я могу решить эту проблему?
1 ответ
Если вы хотите, чтобы результаты, как "xyzapplexyz"
, то вам нужно будет использовать анализатор Ngram вместо EdgeNGram
или вы можете использовать оба в зависимости от ваших требований. EdgeNGram
генерирует токены только с самого начала.
с NGram
яблоко будет одним из сгенерированных токенов для термина xyzapplexyz в предположении max_gram >=5
и вы получите ожидаемые результаты, а также search_analyzer
должен быть другим, или вы получите странные результаты.
Также index size
может стать довольно большим с ngram
если у вас есть огромный кусок текста