Przeszedłem przez wiele blogów i witryn na temat konfigurowania Elasticsearch dla MongoDB w celu indeksowania kolekcji w MongoDB, ale żadna z nich nie była prosta.
Proszę wyjaśnić mi krok po kroku proces instalacji narzędzia Flexiblesearch, który powinien obejmować:
- konfiguracja
- uruchomić w przeglądarce
Używam Node.js z express.js, więc proszę o odpowiednią pomoc.
mongodb
elasticsearch
bibin david
źródło
źródło
Odpowiedzi:
Ta odpowiedź powinna wystarczyć, aby przygotować się do wykonania tego samouczka Budowanie funkcjonalnego komponentu wyszukiwania za pomocą MongoDB, Elasticsearch i AngularJS .
Jeśli chcesz korzystać z wyszukiwania aspektowego z danymi z interfejsu API , warto zwrócić uwagę na BirdWatch Repo Matthiasna .
Oto jak skonfigurować pojedynczy węzeł „klastra” Elasticsearch do indeksowania bazy danych MongoDB do użytku w aplikacji NodeJS, Express na nowej instancji EC2 Ubuntu 14.04.
Upewnij się, że wszystko jest aktualne.
Zainstaluj NodeJS.
Zainstaluj MongoDB - te kroki pochodzą bezpośrednio z dokumentacji MongoDB. Wybierz wersję, w której czujesz się komfortowo. Trzymam się wersji 2.4.9, ponieważ wydaje się, że jest to najnowsza wersja obsługiwana przez MongoDB-River bez problemów.
Zaimportuj publiczny klucz GPG MongoDB.
Zaktualizuj listę źródeł.
Zdobądź pakiet 10gen.
Następnie wybierz swoją wersję, jeśli nie chcesz najnowszej. Jeśli konfigurujesz środowisko na komputerze z systemem Windows 7 lub 8, trzymaj się z daleka od wersji 2.6, dopóki nie naprawią błędów podczas uruchamiania go jako usługi.
Zapobiegaj podbijaniu wersji instalacji MongoDB podczas aktualizacji.
Uruchom usługę MongoDB.
Domyślnie pliki baz danych to / var / lib / mongo, a pliki dziennika to / var / log / mongo.
Utwórz bazę danych przez powłokę mongo i umieść w niej fikcyjne dane.
Teraz, aby przekonwertować samodzielną MongoDB na zestaw replik .
Najpierw zamknij proces.
Teraz uruchamiamy MongoDB jako usługę, więc nie przekazujemy opcji „--replSet rs0” w argumencie wiersza poleceń, gdy ponownie uruchamiamy proces mongod. Zamiast tego umieściliśmy go w pliku mongod.conf.
Dodaj te wiersze, zastępując ścieżki bazy danych i dziennika.
Teraz otwórz ponownie powłokę mongo, aby zainicjować zestaw replik.
Teraz zainstaluj Elasticsearch. Po prostu podążam za tym pomocnym streszczeniem .
Upewnij się, że Java jest zainstalowana.
Na razie trzymaj się wersji 1.1.x, dopóki błąd wtyczki Mongo-River nie zostanie naprawiony w wersji 1.2.1.
Upewnij się, że /etc/elasticsearch/elasticsearch.yml ma włączone następujące opcje konfiguracji, jeśli na razie tworzysz tylko na jednym węźle:
Uruchom usługę Elasticsearch.
Sprawdź, czy działa.
Jeśli widzisz coś takiego, jesteś dobry.
Teraz zainstaluj wtyczki Elasticsearch, aby mógł grać z MongoDB.
Te dwie wtyczki nie są konieczne, ale są dobre do testowania zapytań i wizualizacji zmian w indeksach.
Uruchom ponownie Elasticsearch.
Na koniec zindeksuj kolekcję z MongoDB.
Sprawdź, czy indeks znajduje się w Elasticsearch
Sprawdź stan klastra.
Prawdopodobnie jest żółty z kilkoma nieprzypisanymi odłamkami. Musimy powiedzieć Elasticsearch, z czym chcemy pracować.
Sprawdź ponownie stan klastra. Teraz powinno być zielone.
CHodźmy grać.
źródło
Korzystanie z rzeki może powodować problemy, gdy Twoja operacja się skaluje. Rzeka zużyje mnóstwo pamięci podczas ciężkich operacji. Polecam zaimplementować własne modele elastycznego wyszukiwania lub jeśli używasz mangusty, możesz zbudować swoje modele elastycznego wyszukiwania bezpośrednio w tym lub użyć mongoosastic, który zasadniczo robi to za Ciebie.
Inną wadą Mongodb River jest to, że utkniesz przy użyciu gałęzi mongodb 2.4.x i ElasticSearch 0.90.x. Zaczynasz odkrywać, że brakuje Ci wielu naprawdę fajnych funkcji, a projekt Mongodb River po prostu nie wytwarza użytecznego produktu wystarczająco szybko, aby był stabilny. To powiedziawszy, rzeka Mongodb zdecydowanie nie jest czymś, z czym bym się zajmował. To stwarzało więcej problemów niż było warte. Losowo upuści zapis pod dużym obciążeniem, zużyje dużo pamięci i nie ma ustawienia, które by to ograniczyło. Dodatkowo, river nie aktualizuje się w czasie rzeczywistym, czyta oplogi z mongodb, co z mojego doświadczenia może opóźnić aktualizacje nawet o 5 minut.
Niedawno musieliśmy przepisać dużą część naszego projektu, ponieważ co tydzień zdarza się, że coś idzie nie tak z ElasticSearch. Posunęliśmy się nawet do zatrudnienia konsultanta Dev Ops, który również zgadza się, że najlepiej będzie wyprowadzić się z River.
AKTUALIZACJA: Elasticsearch-mongodb-river obsługuje teraz ES v1.4.0 i mongodb v2.6.x. Jednak nadal prawdopodobnie napotkasz problemy z wydajnością podczas wykonywania ciężkich operacji wstawiania / aktualizacji, ponieważ ta wtyczka będzie próbowała odczytać oplogs mongodb w celu synchronizacji. Jeśli od momentu odblokowania blokady (lub raczej zatrzasku) jest dużo operacji, zauważysz wyjątkowo wysokie zużycie pamięci na serwerze Elasticsearch. Jeśli planujesz przeprowadzić dużą operację, rzeka nie jest dobrym rozwiązaniem. Twórcy ElasticSearch nadal zalecają zarządzanie własnymi indeksami, komunikując się bezpośrednio z ich interfejsem API za pomocą biblioteki klienta dla Twojego języka, zamiast używać river. Tak naprawdę nie jest to celem rzeki. Rzeka na Twitterze jest doskonałym przykładem tego, jak należy korzystać z rzeki. Jest to doskonały sposób na pozyskiwanie danych ze źródeł zewnętrznych,
Weź również pod uwagę, że mongodb-river pozostaje w tyle w wersji, ponieważ nie jest utrzymywana przez ElasticSearch Organisation, a jest utrzymywana przez osobę trzecią. Rozwój utknął w gałęzi v0.90 przez długi czas po wydaniu wersji 1.0, a kiedy została wydana wersja dla wersji 1.0, nie była stabilna do czasu wypuszczenia wersji 1.3.0 elastsearch. Wersje Mongodb również pozostają w tyle. Możesz znaleźć się w trudnej sytuacji, gdy chcesz przejść do późniejszej wersji każdego z nich, zwłaszcza gdy ElasticSearch jest tak intensywnie rozwijany, a po drodze jest wiele bardzo oczekiwanych funkcji. Śledzenie najnowszej wersji ElasticSearch było bardzo ważne, ponieważ w dużym stopniu polegamy na ciągłym ulepszaniu naszej funkcji wyszukiwania, która jest główną częścią naszego produktu.
Podsumowując, prawdopodobnie otrzymasz lepszy produkt, jeśli zrobisz to sam. To nie jest takie trudne. To tylko kolejna baza danych do zarządzania w kodzie i można ją łatwo upuścić do istniejących modeli bez konieczności przeprowadzania poważnych zmian.
źródło
not_analyzed
, w przeciwnym razie będziesz miał problemy z zapytaniem o to, postępuj zgodnie ze sposobem tokenizacji analizowanych pól.Uważam, że złącze mongo jest przydatne. Pochodzi z Mongo Labs (MongoDB Inc.) i może być teraz używany z Elasticsearch 2.x
Menedżer dokumentów Elastic 2.x: https://github.com/mongodb-labs/elastic2-doc-manager
mongo-connector tworzy potok z klastra MongoDB do co najmniej jednego systemu docelowego, takiego jak Solr, Elasticsearch lub inny klaster MongoDB. Synchronizuje dane w MongoDB z celem, a następnie dostosowuje oplog MongoDB, nadążając za operacjami w MongoDB w czasie rzeczywistym. Został przetestowany z Pythonem 2.6, 2.7 i 3.3+. Szczegółowa dokumentacja jest dostępna na wiki.
https://github.com/mongodb-labs/mongo-connector https://github.com/mongodb-labs/mongo-connector/wiki/Usage%20with%20ElasticSearch
źródło
River to dobre rozwiązanie, gdy chcesz mieć synchronizację prawie w czasie rzeczywistym i ogólne rozwiązanie.
Jeśli masz już dane w MongoDB i chcesz je bardzo łatwo wysłać do Elasticsearch, np. „One-shot”, możesz wypróbować mój pakiet w Node.js https://github.com/itemsapi/elasticbulk .
Korzysta ze strumieni Node.js, więc możesz importować dane ze wszystkiego, co obsługuje strumienie (tj. MongoDB, PostgreSQL, MySQL, pliki JSON itp.)
Przykład dla MongoDB do Elasticsearch:
Zainstaluj pakiety:
Utwórz skrypt, np. Script.js:
Wyślij swoje dane:
Nie jest ekstremalnie szybki, ale działa dla milionów płyt (dzięki strumieniom).
źródło
Oto jak to zrobić w mongodb 3.0. Skorzystałem z tego fajnego bloga
Przetestuj w przeglądarce:
http: // localhost: 9200 / _search? q = home
źródło
Tutaj znalazłem kolejną dobrą opcję migracji danych MongoDB do Elasticsearch. Demon go, który synchronizuje mongodb z elastycznym wyszukiwaniem w czasie rzeczywistym. To Monstache. Jest dostępny pod adresem: Monstache
Poniżej początkowego ustawienia, aby go skonfigurować i używać.
Krok 1:
Krok 2 :
Krok 3: Sprawdź replikację.
Krok 4. Pobierz plik „ https://github.com/rwynn/monstache/releases ”. Rozpakuj pobrany plik i dostosuj zmienną PATH, aby zawierała ścieżkę do folderu dla Twojej platformy. Przejdź do cmd i wpisz
"monstache -v"
# 4.13.1 Monstache używa formatu TOML do swojej konfiguracji. Skonfiguruj plik do migracji o nazwie config.tomlKrok 5.
Mój config.toml ->
Krok 6.
źródło
Ponieważ mongo-łącznik wydaje się teraz martwy, moja firma zdecydowała się zbudować narzędzie do używania strumieni zmian Mongo do wyprowadzania danych do Elasticsearch.
Nasze wstępne wyniki wyglądają obiecująco. Możesz to sprawdzić na https://github.com/electionsexperts/mongo-stream . Wciąż jesteśmy na wczesnym etapie rozwoju i mile widziane są sugestie lub wkład.
źródło