Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Kiedy rozważyć Solr

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. uruchom ponownie serwer mysql w systemie Windows 7

  2. Symulowanie grup przechwytywania wyrażeń regularnych w mysql

  3. Jak usunąć zduplikowane wiersze z tabeli MySQL

  4. Kolejność MySQL według ciągu z liczbami

  5. Jak zbudować prosty system oceniania i oceny na 5 gwiazdek?