To pytanie wymaga udzielenia bardzo szerokiej odpowiedzi we wszystkich aspektach. Są bardzo dobrze pewne specyfikacje, które mogą sprawić, że jeden system będzie lepszy od drugiego w specjalnym przypadku użycia, ale chcę omówić tutaj podstawy.
Zajmę się w całości Solr jako przykładem dla kilku wyszukiwarek, które działają mniej więcej w ten sam sposób.
Chcę zacząć od kilku twardych faktów:
-
Nie możesz polegać na Solr/Lucene jako bezpiecznej bazie danych. Jest lista faktów, dlaczego, ale najczęściej składają się one z brakujących opcji odzyskiwania, braku transakcji kwasowych, możliwych komplikacji itp. Jeśli zdecydujesz się na użycie solr, musisz wypełnić swój indeks z innego źródła, takiego jak tabela SQL. W rzeczywistości solr jest idealny do przechowywania dokumentów zawierających dane z kilku tabel i relacji, które w innym przypadku wymagałyby skonstruowania złożonych złączeń.
-
Solr/Lucene zapewnia oszałamiające funkcje analizy tekstu / stemmingu / scoringu wyszukiwania pełnotekstowego / rozmycia. Rzeczy, których po prostu nie możesz zrobić z MySQL. W rzeczywistości wyszukiwanie pełnotekstowe w MySql ogranicza się do MyIsam, a punktacja jest bardzo trywialna i ograniczona. Ważenie pól, wzmacnianie dokumentów w oparciu o określone metryki, wyniki punktacji na podstawie bliskości fraz, dopasowywanie dokładności itp. to bardzo ciężka praca lub prawie niemożliwa.
-
W Solr/Lucene masz dokumenty. Tak naprawdę nie można przechowywać relacji i procesów. Cóż, możesz oczywiście indeksować klucze innych dokumentów wewnątrz wielowartościowego pola jakiegoś dokumentu, więc w ten sposób możesz faktycznie przechowywać relacje 1:n i zrobić to w obie strony, aby uzyskać n:n, ale narzut danych. Nie zrozum mnie źle, jest idealnie w porządku i wydajny do wielu celów (na przykład dla jakiegoś katalogu produktów, w którym chcesz przechowywać dystrybutorów produktów i chcesz przeszukiwać tylko części, które są dostępne u określonych dystrybutorów lub coś takiego). Ale dochodzisz do końca możliwości z HAS / HAS NOT. Prawie nie można zrobić czegoś w stylu „zdobądź wszystkie produkty, które są dostępne u co najmniej 3 dystrybutorów”.
-
Solr/Lucene posiada bardzo fajne funkcje facettingu i analizy post search. Na przykład:po bardzo szerokim wyszukiwaniu, które miało 40000 trafień, możesz wyświetlić, że uzyskasz tylko 3 trafienia, jeśli zawęzisz wyszukiwanie do kombinacji posiadania w tym polu tej wartości i tego pola o tej wartości. Rzeczy, które wymagają dodatkowych zapytań w MySQL, są wykonywane wydajnie i wygodnie.
Podsumujmy więc
-
Siłą Lucene jest wyszukiwanie/analizowanie tekstu. Jest to również niesamowicie szybkie ze względu na odwróconą strukturę indeksu. Możesz naprawdę dużo przetworzyć i zaspokoić inne potrzeby. Chociaż jest zorientowany na dokument i nie ma "wyszukiwania wykresów", jak robią to potrójne magazyny w SPARQL, podstawowe relacje N:M można przechowywać i odpytywać. Jeśli Twoja aplikacja skupia się na wyszukiwaniu tekstu, zdecydowanie powinieneś wybrać Solr/Lucene, jeśli nie masz dobrych powodów, takich jak bardzo złożone, wielowymiarowe zapytania filtrujące, aby zrobić inaczej.
-
Jeśli nie masz wyszukiwania tekstowego, ale raczej coś, w którym możesz wskazać i kliknąć coś, ale nie wpisać tekstu, stare dobre relacyjne bazy danych są prawdopodobnie lepszym sposobem.