У меня есть набор документов в индексе Whoosh, и я хочу предоставить функцию предложения условий поиска. Итак, если вы наберете «поп», могут появиться следующие предложения:
- Попкорн
- популярный
- Папа Римский
- Тополь фильм
- поп-культура
У меня есть термины, которые должны появиться в качестве предложений, входящих в поле NGRAMWORDS в моем индексе, но когда я делаю запрос в этом поле, я получаю автозаполненные результаты, а не расширенные предложения, поэтому я получаю документы с тегом «поп-культура». ", но нет возможности показать этот термин пользователю. (Для сравнения, я бы сделал это в ElasticSearch, используя сопоставление завершения для этого поля, а затем использовал бы конечную точку _suggest для получения предложений.)
Я могу найти только примеры автозаполнения или исправления орфографии в документации или где-либо еще в Интернете. Можно ли каким-либо образом получить предложения поисковых запросов из моего индекса с помощью Whoosh?
Изменить: expand_prefix
был столь необходимым указателем в правильном направлении. В итоге я использовал KEYWORD(commas=True, lowercase=True)
для своего поля предложения и код, подобный этому, чтобы получить предложения в порядке наиболее часто встречающихся (expand_prefix
и iter_prefix
дадут их в алфавитном порядке):
def get_suggestions(term):
with ix.reader() as r:
suggestions = [(s[0], s[1].doc_frequency()) for s in r.iter_prefix('suggest', term)]
return sorted(suggestions, key=itemgetter(1), reverse=True)