Oprócz odpowiedzi na pytania OP, pozwólcie, że przedstawię Apache Solr wgląd od prostego wprowadzenia do szczegółowej instalacji i implementacji .
Proste wprowadzenie
Każdy, kto miał doświadczenie z powyższymi wyszukiwarkami lub innymi silnikami niewymienionymi na liście - chciałbym usłyszeć twoje opinie.
Solr nie powinien być używany do rozwiązywania problemów w czasie rzeczywistym. W przypadku wyszukiwarek Solr jest właściwie grą i działa bezbłędnie .
Solr działa dobrze w aplikacjach internetowych o dużym ruchu ( czytam gdzieś, że to nie nadaje się do tego, ale tworzę kopię zapasową tego oświadczenia ). Wykorzystuje pamięć RAM, a nie procesor.
- trafność i ranking wyników
The Doładowania pomaga oceniającym wyniki pojawiają się na górze. Powiedzmy, starasz się szukać nazwy john w dziedzinie FirstName i Nazwisko i chcesz dać trafności do firstname dziedzinie, to trzeba zwiększyć górę firstname pola, jak pokazano.
http://localhost:8983/solr/collection1/select?q=firstname:john^2&lastname:john
Jak widać, pole imienia zostaje wzmocnione z wynikiem 2.
Więcej na temat SolrRelevancy
- szybkość wyszukiwania i indeksowania
Prędkość jest niewiarygodnie duża i nie ma na to kompromisów. Powód, dla którego przeprowadziłem się do Solr .
Jeśli chodzi o szybkość indeksowania, Solr może również obsługiwać JOINS z tabel bazy danych. Wyższy i złożony JOIN wpływa na szybkość indeksowania. Jednak ogromna konfiguracja pamięci RAM z łatwością poradzi sobie z tą sytuacją.
Im wyższa pamięć RAM, tym większa jest szybkość indeksowania Solr.
- łatwość użycia i łatwość integracji z Django
Nigdy nie próbowałem zintegrować Solr i Django , jednak możesz to zrobić za pomocą Haystacka . Znalazłem interesujący artykuł na ten sam temat i oto github .
- wymagania dotyczące zasobów - witryna będzie hostowana na VPS, więc idealnie byłoby, gdyby wyszukiwarka nie wymagała dużo pamięci RAM i procesora
Solr rozmnaża się na RAM, więc jeśli RAM jest wysoki, nie musisz się martwić o Solr .
Wykorzystanie pamięci RAM przez Solr gwałtownie spada po pełnym indeksowaniu, jeśli masz jakieś miliardy rekordów, możesz mądrze wykorzystać import Delta w celu rozwiązania tej sytuacji. Jak wyjaśniono, Solr jest rozwiązaniem zbliżonym do czasu rzeczywistego .
Solr jest wysoce skalowalny. Spójrz na SolrCloud . Niektóre kluczowe cechy tego.
- Odłamki (lub dzielenie na fragmenty to koncepcja dystrybucji indeksu na wiele komputerów, na przykład, jeśli indeks urósł za duży)
- Równoważenie obciążenia (jeśli Solrj jest używany z chmurą Solr, automatycznie zajmuje się równoważeniem obciążenia za pomocą mechanizmu Round-Robin)
- Wyszukiwanie rozproszone
- Duża dostępność
- dodatkowe funkcje, takie jak „miałeś na myśli?”, powiązane wyszukiwania itp
W powyższym scenariuszu można użyć SpellCheckComponent, który jest zapakowany w Solr . Istnieje wiele innych funkcji, SnowballPorterFilterFactory pomaga odzyskać rekordy, które mówią, że jeśli wpiszesz, książki zamiast książki , zostaną wyświetlone wyniki związane z książką .
Ta odpowiedź dotyczy głównie Apache Solr i MySQL . Django jest poza zakresem.
Zakładając, że jesteś w środowisku LINUX, możesz przejść do tego artykułu dalej. (moja była wersją Ubuntu 14.04)
Szczegółowa instalacja
Pierwsze kroki
Pobierz Apache Solr od tutaj . To byłaby wersja 4.8.1 . Możesz pobrać nowe wersje, znalazłem to stabilne.
Po pobraniu archiwum rozpakuj go do wybranego folderu. Powiedz… Downloads
lub cokolwiek… Tak to będzie wyglądaćDownloads/solr-4.8.1/
Po wyświetleniu monitu .. Przejdź do katalogu
shankar@shankar-lenovo: cd Downloads/solr-4.8.1
Więc teraz jesteś tutaj ..
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1$
Uruchom serwer aplikacji Jetty
Jetty jest dostępny w folderze przykładów solr-4.8.1
katalogu, więc przejdź do niego i uruchom serwer Jetty Application Server.
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/example$ java -jar start.jar
Teraz nie zamykaj terminala, zminimalizuj go i pozwól mu pozostać na boku.
(WSKAZÓWKA: Użyj & after start.jar, aby Jetty Server działał w tle)
Aby sprawdzić, czy Apache Solr działa poprawnie, odwiedź ten adres URL w przeglądarce. http: // localhost: 8983 / solr
Uruchamianie pomostu na niestandardowym porcie
Działa domyślnie na porcie 8983. Możesz zmienić port tutaj lub bezpośrednio w jetty.xml
pliku.
java -Djetty.port=9091 -jar start.jar
Pobierz JConnector
Ten plik JAR działa jako pomost między MySQL a JDBC. Pobierz tutaj wersję niezależną od platformy
Po pobraniu rozpakuj folder, skopiuj go mysql-connector-java-5.1.31-bin.jar
i wklej do katalogu lib .
shankar@shankar-lenovo:~/Downloads/solr-4.8.1/contrib/dataimporthandler/lib
Tworzenie tabeli MySQL do połączenia z Apache Solr
Aby użyć Solr , musisz mieć tabele i dane do wyszukiwania. W tym celu użyjemy MySQL do utworzenia tabeli i wypchnięcia losowych nazw, a następnie będziemy mogli użyć Solr do połączenia się z MySQL i zindeksowania tej tabeli i jej wpisów.
1. Struktura tabeli
CREATE TABLE test_solr_mysql
(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NULL,
created TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
2. Wypełnij powyższą tabelę
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jean');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jack');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jason');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Vego');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Grunt');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jasper');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Fred');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Jenna');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Rebecca');
INSERT INTO `test_solr_mysql` (`name`) VALUES ('Roland');
Wchodzenie do rdzenia i dodawanie dyrektyw lib
1. Nawiguj do
shankar@shankar-lenovo: ~/Downloads/solr-4.8.1/example/solr/collection1/conf
2.Modyfikowanie pliku solrconfig.xml
Dodaj te dwie dyrektywy do tego pliku ..
<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />
Teraz dodaj DIH (moduł obsługi importu danych)
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler" >
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3. Utwórz plik db-data-config.xml
Jeśli plik istnieje, zignoruj go, dodaj te wiersze do tego pliku. Jak widać w pierwszym wierszu, musisz podać poświadczenia bazy danych MySQL . Nazwa bazy danych, nazwa użytkownika i hasło.
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/yourdbname" user="dbuser" password="dbpass"/>
<document>
<entity name="test_solr" query="select CONCAT('test_solr-',id) as rid,name from test_solr_mysql WHERE '${dataimporter.request.clean}' != 'false'
OR `created` > '${dataimporter.last_index_time}'" >
<field name="id" column="rid" />
<field name="solr_name" column="name" />
</entity>
</document>
</dataConfig>
(WSKAZÓWKA: Możesz mieć dowolną liczbę jednostek, ale uważaj na pole identyfikatora, jeśli są takie same, indeksowanie zostanie pominięte).
4. Zmodyfikuj plik schema.xml
Dodaj to do pliku schema.xml, jak pokazano ..
<uniqueKey>id</uniqueKey>
<field name="solr_name" type="string" indexed="true" stored="true" />
Realizacja
Indeksowanie
To jest prawdziwa okazja. Aby skorzystać z zapytań Solr, musisz wykonać indeksowanie danych z MySQL do Solr inorder.
Krok 1: Przejdź do panelu administracyjnego Solr
W przeglądarce kliknij adres URL http: // localhost: 8983 / solr . Ekran otwiera się w ten sposób.
Jak wskazuje znacznik, przejdź do Inorder Logging, aby sprawdzić, czy którakolwiek z powyższych konfiguracji nie doprowadziła do błędów.
Krok 2: Sprawdź swoje dzienniki
Ok, więc teraz jesteś tutaj. Jak możesz, jest wiele żółtych wiadomości (OSTRZEŻENIA). Upewnij się, że nie masz komunikatów o błędach oznaczonych na czerwono. Wcześniej w naszej konfiguracji dodaliśmy wybrane zapytanie w naszym pliku db-data-config.xml , powiedzmy, że jeśli wystąpiłyby jakieś błędy w zapytaniu, pojawiłoby się tutaj.
W porządku, bez błędów. Jesteśmy gotowi do wyjścia. Wybierzmy Collection1 z listy, jak pokazano, i wybierz Import danych
Krok 3: DIH (moduł obsługi importu danych)
Za pomocą DIH połączysz się z MySQL z Solr poprzez plik konfiguracyjny db-data-config.xml z interfejsu Solr i pobierzesz 10 rekordów z bazy danych, która zostanie zindeksowana do Solr .
Aby to zrobić, wybierz pełny import i zaznacz opcje Wyczyść i zatwierdź . Teraz kliknij Wykonaj jak pokazano.
Możesz też użyć bezpośredniego zapytania pełnego importu, takiego jak ten ..
http://localhost:8983/solr/collection1/dataimport?command=full-import&commit=true
Po kliknął ty Execute , Solr zaczyna indeksu rekordy, jeśli są jakieś błędy, to znaczy indeksowania powiodło i trzeba wrócić do rejestrowania sekcji, aby zobaczyć, co poszło źle.
Zakładając, że nie ma żadnych błędów w tej konfiguracji i jeśli indeksowanie zakończy się pomyślnie. Otrzymasz to powiadomienie.
Krok 4: Uruchamianie zapytań Solr
Wygląda na to, że wszystko poszło dobrze, teraz można użyć zapytań Solr do zapytania o indeksowane dane. Kliknij zapytanie po lewej stronie, a następnie naciśnij przycisk Wykonaj u dołu.
Zobaczysz indeksowane rekordy, jak pokazano.
Odpowiednie zapytanie Solr dla listy wszystkich rekordów to
http://localhost:8983/solr/collection1/select?q=*:*&wt=json&indent=true
Cóż, jest tam wszystkie 10 indeksowanych rekordów. Powiedzmy, że potrzebujemy tylko nazw zaczynających się od Ja , w tym przypadku musisz kierować na nazwę kolumny solr_name
, dlatego zapytanie jest takie.
http://localhost:8983/solr/collection1/select?q=solr_name:Ja*&wt=json&indent=true
W ten sposób piszesz zapytania Solr . Aby przeczytać więcej na ten temat, sprawdź ten piękny artykuł .