2011-04-26 2 views
7

Я ищу поисковую систему документа (например, Xapian, Whoosh, Lucene, Solr, Sphinx или другие), которая способна искать частичные термины.Поиск документов по частичным словам

Например, при поиске термина «Brit» поисковик должен возвращать документы, содержащие либо «Britney» или «Британию» или вообще любой документ, содержащий соответствующий слово г *brit*

тангенциально, я заметил, большинство двигателей использовать TF-IDF (временная частота - обратная частота документа) или ее производные, которые основаны на полных условиях, а не на частичных условиях. Существуют ли какие-либо другие методы, которые были успешно реализованы помимо TF-IDF для поиска документов?

+0

Я рекомендую вам добавить тег поисковой системы на ваш вопрос, lucene, Xapian или, по крайней мере, поисковую систему. Поиск - это общий тег, люди, которые находятся в поисковых системах, могут устать читать всевозможные странные запросы для вопросов, не связанных с поисковой системой. Удачи! – shellter

+0

Спасибо за предложение убежища. Добавлено больше тегов. – GeneralBecos

+1

По какой-либо причине вы не прочитали документацию по различным двигателям. Lucene (и, следовательно, Solr) поддерживает поиск по шаблону: http://wiki.apache.org/lucene-java/LuceneFAQ#What_wildcard_search_support_is_available_from_Lucene – ewh

ответ

11

С Lucene вы могли бы реализовать несколько способов:

1.) Вы можете использовать подстановочные запросы *brit* (Вы должны установить анализатор запросов, чтобы позволить ведущим джокерам)

2 .) Вы можете создать дополнительное поле, содержащее N-Grams of all the terms. Это приведет к увеличению индексов, но во многих случаях будет быстрее (скорость поиска).

3.) Вы можете использовать нечеткий поиск для обработки ошибок ввода в запросе. например кто-то напечатал britnei, но хотел бы найти britney.

Для подстановочных запросов и нечетких поисков посмотрите на query syntax docs.

+0

Как вы можете использовать «*» в начале запроса? – SomethingSomething

+2

Вы должны сообщить анализатору запросов, чтобы разрешить эти запросы. Для этого воспользуйтесь функцией setAllowLeadingWildcard. https://lucene.apache.org/core/4_0_0/queryparser/org/apache/lucene/queryparser/classic/QueryParserBase.html#setAllowLeadingWildcard(boolean) – csupnig

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