2011-04-26 16 views
7

Szukam wyszukiwarki dokumentów (takich jak Xapian, Whoosh, Lucene, Solr, Sphinx lub inne), która może wyszukiwać częściowe terminy.Wyszukiwanie dokumentów przy wyrazach częściowych

Na przykład podczas wyszukiwania termin „brit” wyszukiwarka powinien zwrócić dokumenty zawierające albo „Britney” czy „Wielka Brytania” czy w ogóle jakikolwiek dokument zawierający pasujące słowo r *brit*

stycznie, zauważyłem większości silników stosować TF-IDF (częstotliwość dokumentów odwróconych częstotliwości) lub jej pochodne oparte na pełnych warunkach, a nie na częściach. Czy są jakieś inne techniki, które zostały pomyślnie wdrożone poza TF-IDF do pobierania dokumentów?

+0

Polecam dodanie tagu wyszukiwarki do pytania, lucene, Xapian lub przynajmniej wyszukiwarki. Wyszukiwarka to ogólny znacznik, ludzie, którzy są w wyszukiwarkach, mogą się zmęczyć czytając przeróżne dziwne zapytania dotyczące pytań niezwiązanych z wyszukiwarką. Powodzenia! – shellter

+0

Dzięki za schronienie sugestii. Dodano więcej tagów. – GeneralBecos

+1

Każdy powód, dla którego nie przeczytałeś dokumentacji różnych silników. Lucene (a zatem Solr) obsługuje wyszukiwanie wieloznaczne: http://wiki.apache.org/lucene-java/LuceneFAQ#What_wildcard_search_support_is_available_from_Lucene – ewh

Odpowiedz

11

Z Lucene będzie można zaimplementować to na kilka sposobów:

1.) Można użyć symbolu wieloznacznego odpytuje *brit* (Trzeba by ustawić parser zapytań umożliwiający wiodącym dzikie karty)

2 .) Możesz utworzyć dodatkowe pole zawierające N-Grams of all the terms. Spowoduje to zwiększenie indeksów, ale w wielu przypadkach będzie szybszy (szybkość wyszukiwania).

3.) Możesz użyć wyszukiwania rozmytego do obsługi błędów pisowni w zapytaniu. na przykład ktoś wpisał britnei, ale chciał znaleźć britney.

W przypadku zapytań wieloznacznych i wyszukiwania rozmytego zapoznaj się z query syntax docs.

+0

Jak możesz użyć "*" na początku zapytania? – SomethingSomething

+2

Musisz przekazać analizator zapytań, aby zezwolić na tego typu zapytania. W tym celu użyj funkcji setAllowLeadingWildcard. https://lucene.apache.org/core/4_0_0/queryparser/org/apache/lucene/queryparser/classic/QueryParserBase.html#setAllowLeadingWildcard(boolean) – csupnig

Powiązane problemy