Используя 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 если у вас есть огромный кусок текста

Другие вопросы по тегам