2009-08-11 10 views
42

Próbuję podjąć decyzję w sprawie technologii wyszukiwania/indeksowania open source dla projektu .Net. Wygląda na to, że standardem dla projektów Java jest Lucene, ale jeśli chodzi o .Net, projekt Lucene.Net wydaje się być dość nieaktywny. Czy to nadal najlepsza opcja? Czy istnieją inne opłacalne alternatywy?Jaka jest najlepsza i najbardziej aktywna technologia wyszukiwania w technologii .NET typu open source?

+4

+1: Naprawdę jestem tym zainteresowany. Próbowałem przejść przez proces używania procesora indeksowania pełnego tekstu SQL Server. Działa dobrze z wyszukiwaniem plików binarnych, takich jak pdf, doc, etc; ale podczas wyszukiwania w zwykłych kolumnach powolny jest pies. 6 sekund na przeszukiwanie tabeli rzędu 7000 jest moim zdaniem niedopuszczalne. Na razie używam prostych LIKE "value%", które bardzo szybko wracają. – NotMe

Odpowiedz

23

Chociaż nie były one wydaniami "pełnowartościowymi" (tj. pełna dokumentacja, aktualizacje strony internetowej) Lucene.Net od dłuższego czasu, wciąż są nowe zatwierdzenia do jego repozytorium SVN. Na przykład najnowsze wydanie (2.3.2) zostało oznaczone jako 07/24/09 (see here). Ponieważ rozwój jest nadal aktywny, użyłbym go do nowych projektów wyszukiwania pełnotekstowego.

+0

W pewnym sensie pomyślałem, że to będzie odpowiedź. Lucene.Net to jest wtedy. Dzięki wszystkim! – jamesaharvey

2

Spójrz na www.searcharoo.net. Posiada przeszukiwacz i funkcje takie jak praca, indeksowanie dokumentów biurowych/plików PDF. Autor jest bardzo aktywny w artykułach codeproject i dość szybko odpowiada na pytania.

6

lucene.net będzie koniecznie opóźniać wersję Java, ponieważ jest portem. Nie podoba mi się również, że port luceński jest prostym egzemplarzem, chociaż ułatwia to dokumentom, które przypuszczam. Coś do rozważenia jest przy użyciu Solr, jeśli nie potrzebujesz super ścisłej (binarnej) integracji. Użyłem go wcześniej z dobrym skutkiem. Nadal jest zasilany przez Lucene, ale myślę, że jest lepszy, ponieważ ma kilka lepszych funkcji. Możesz go używać z domeny .NET za pośrednictwem punktu końcowego HTTP.

Jedno pytanie, które należy zadać sobie, to to, czego naprawdę potrzebujesz/chcesz w rozwiązaniu wyszukiwania. Istnieje wiele sposobów na wdrożenie wyszukiwania, a nie wszystkie rozwiązania działają w każdej sytuacji.

3

Chociaż jej nie .net polecam użyciu Solr jako jego zbudowany na Lucene i będzie prosty do integrują biorąc pod uwagę fakt, że zwraca XML/HTTP i JSON

6

SQLite ma FTS3 (Full Text Search 3), które mogą rób to, co chcesz. Nie mam bezpośredniego doświadczenia z tym, ale uważam, że został opracowany wyraźnie, aby robić to, co robi Lucene, przynajmniej w tym prostym przypadku. Nie wierzę, że możesz zmienić tokenizm lub cokolwiek (bez modyfikowania kodu źródłowego), ale jest to opcja.

+1

Używamy SQLite FTS w naszym produkcie i jest bardzo dobry i znacznie szybszy niż Lucene.NET w naszych szczególnych przypadkach. –

11

wiem nie jest open-source, ale jest to darmo i bardzo kompleksowe propozycja od firmy Microsoft:

Microsoft Search Server 2008 Express

  • Out-of-the- trafność pudełka.

    Zlokalizowany interfejs.

    Rozszerzalne wyszukiwanie.

    Brak ustawionych limitów dokumentów.

    Ciągłe indeksowanie propagacji.

    out-of-the-box złącza indeksujące

    streszczenia treści.

    Podświetlanie hitów.

    Najlepsze zakłady i definicje.

    Korekta zapytania.

    Duplikat zwijania.

    Filtruj według nieruchomości.

    Filtruj według języka.

    Sortuj według daty.

    E-mail/powiadomienia RSS

+2

Jednak limit rozmiaru DB jest łatwo osiągalny, jeśli zamierzasz użyć tego dla indeksu wyszukiwania. Nie jest również przeznaczony głównie do indeksowania tekstów i podczas indeksowania tekstu może działać raczej słabo w porównaniu do czegoś w rodzaju lucenu. –

+1

Interesujące - nie wiedziałem, że MS zrobił taki produkt. – RichardOD

+1

ms szukaj ... fuj! – ADAM

3

Jak rozumiem, trzeba „tylko” indeksu pełnotekstowego na istniejącej bazie danych i SQL Server wyszukiwanie pełnotekstowe w zasadzie pracował dla ciebie, ale Twoja obecna implementacja/konfiguracja jest zbyt wolna.

Gdybym był tobą, nie wybrałbym zupełnie innego podejścia (pomyśl tylko o bałaganie, aby zewnętrzny indeks był zsynchronizowany z twoją bazą danych, lub dołącz wyniki zapytania z obu itd.). Spróbuj rozwiązać problem z wydajnością w SQL Serverze, ponieważ nikt nie podejrzewałby poważnie, że 6sec do wyszukiwania 7k wierszy jest ostatnim słowem dla rozwiązania klasy korporacyjnej używanego w jednych z największych baz danych ... Może postaraj się zadać nowe pytanie o typowych pułapkach z tą funkcją (nie jestem ekspertem w tej dziedzinie), a możesz skończyć z prostą poprawką, zamiast kompletnego przebudowania architektury wyszukiwania;)

0

Jeśli naprawdę nie nalegasz na .Net, możesz spróbować Sphinx. Open source i dostępne dla wszystkich platform (Windows/Linux).

4

Lucene.net jest zaimplementowany w nHibernate, więc jeśli szukasz również programu odwzorowującego O/R, kombinacja może być warta głębszej kontroli.

Obecnie tworzymy prototyp i konfigurujemy Lucene wykonuje się w kilka minut (używamy płynnego nhibernate).

+0

Próbuję również dać NHibernate. Dzięki za informację. – jamesaharvey

5

Po użyciu Lucene.Net w kilku projektach, chciałbym dodać sugestię kompilacji wersji lucene w Javie do kodu .net z IKVM.NET. Działa wspaniale i nigdy nie musisz się martwić o bycie nieaktualnym w odniesieniu do wersji Java. Możesz także skompilować wszystkie dodatkowe biblioteki i używać ich również (używam plików wyszukiwania GIS w jednym projekcie).

+1

Czy myślałeś o stworzeniu do tego projektu codeplex? Może ustawiam okresową kompilację – Mikos

+0

+1 dla tej oczywistej, ale łatwo przeoczonej opcji, biorąc pod uwagę Lucene.NET. Jeszcze o tym nie myślałem; czy napotkaliście jakieś przeszkody, które mogłyby utrudnić to sklepom spoza Javy lub czy korzystanie z IKVM w przypadku projektu o takim rozmiarze jest tak łatwe, jak mogłoby się wydawać? –

+1

@Mikos - całkiem sprytny pomysł; w przypadku, gdy okaże się to wykonalne w przypadku projektu wielkości Lucene, może to być dobrym precedensem dla tego podejścia - czy takie podejście jest już powszechne, a ja właśnie tęskniłem? –

1

Użyłem DotLucene, ale napotkałem na wiele problemów. jednym z głównych był fakt, że wymagało pełnego zaufania do uruchomienia.

mam od przeniósł się do korzystania SearchAroo: http://www.searcharoo.net/

to wykorzystuje przechowywania danych XML i znalazłem jego wydajność jest bardzo podobny do kropki Lucene.

Jeśli szukasz innej opcji, zdecydowanie popatrzę.

Powiązane problemy