ElasticsearchRozpoczęcie pracy z Elasticsearch


Uwagi

Elasticsearch to zaawansowany serwer wyszukiwania typu open source oparty na Lucene i napisany w Javie.

Zapewnia rozproszone pełne i częściowe wyszukiwanie tekstowe, oparte na zapytaniach i geolokalizacji funkcje wyszukiwania dostępne za pośrednictwem interfejsu API REST HTTP.

Wersje

Wersja Data wydania
5.2.1 14.02.2017
5.2.0 31.01.2017
5.1.2 2017-01-12
5.1.1 08.12.2016
5.0.2 29.11.2016
5.0.1 15.11.2016
5.0.0 26.10.2016
2.4.0 31.08.2016
2.3.0 30.03.2016
2.2.0 02.02.2016
2.1.0 24.11.2015
2.0.0 28.10.2015
1.7.0 2015-07-16
1.6.0 2015-06-09
1.5.0 2015-03-06
1.4.0 05.11.2014
1.3.0 2014-07-23
1.2.0 2014-05-22
1.1.0 2014-03-25
1.0.0 14.02.2014

Podstawowe parametry wyszukiwania z przykładami:

Domyślnie pełny indeksowany dokument jest zwracany jako część wszystkich wyszukiwań. Jest to określane jako źródło (pole _source w _source wyszukiwania). Jeśli nie chcemy, aby cały dokument źródłowy został zwrócony, mamy możliwość żądania tylko kilku pól ze źródła, lub możemy ustawić wartość _source na false, aby całkowicie pominąć pole.

Ten przykład pokazuje, jak zwrócić dwa pola, account_number i balance (wewnątrz _source ), z wyszukiwania:

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_all": {} },
  "_source": ["account_number", "balance"]
}'
 

Zauważ, że powyższy przykład po prostu ogranicza informacje zwracane w polu _source . Nadal zwróci tylko jedno pole o nazwie _source ale uwzględnione zostaną tylko pola account_number i balance .

Jeśli wywodzisz się z tła SQL, powyższe jest w pewnym sensie podobne do zapytania SQL

SELECT account_number, balance FROM bank;
 

Teraz przejdźmy do części zapytania. Wcześniej widzieliśmy, jak zapytanie match_all jest używane do dopasowania wszystkich dokumentów. Wprowadźmy teraz nowe zapytanie o nazwie pasujące zapytanie, które można traktować jako podstawowe zapytanie z polami wyszukiwania (tzn. Wyszukiwanie z określonego pola lub zestawu pól).

Ten przykład zwraca konto z account_number ustawionym na 20 :

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "account_number": 20 } }
}'
 

Ten przykład zwraca wszystkie konta zawierające termin „mill” w address :

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "address": "mill" } }
}'
 

Ten przykład zwraca wszystkie konta zawierające termin „młyn” lub „pas” w address :

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "address": "mill lane" } }
}'
 

Ten przykład jest wariantem match ( match_phrase ), która dzieli zapytanie na warunki i zwraca tylko dokumenty zawierające wszystkie warunki w address w tych samych pozycjach względem siebie [1] .

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_phrase": { "address": "mill lane" } }
}'
 

Wprowadźmy teraz zapytanie bool (ean). Zapytanie bool pozwala nam komponować mniejsze zapytania w większe, używając logiki boolowskiej.

Ten przykład składa się z dwóch dopasowanych zapytań i zwraca wszystkie konta zawierające „mill” i „lane” w adresie:

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'
 

W powyższym przykładzie klauzula bool must określa wszystkie zapytania, które muszą być prawdziwe, aby dokument mógł zostać uznany za zgodny.

W przeciwieństwie do tego przykład składa się z dwóch zapytań dopasowujących i zwraca wszystkie konta zawierające „mill” lub „lane” w address :

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "should": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'
 

W powyższym przykładzie klauzula bool should określać listę zapytań, z których każde musi być prawdziwe, aby dokument został uznany za zgodny.

Ten przykład składa się z dwóch dopasowanych zapytań i zwraca wszystkie konta, które nie zawierają ani „frezowania”, ani „pasa” w address :

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must_not": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'
 

W powyższym przykładzie klauzula bool must_not określa listę zapytań, z których żadne nie musi być prawdziwe, aby dokument został uznany za zgodny.

Możemy łączyć klauzule must, should i must_not jednocześnie w zapytaniu bool. Ponadto możemy komponować zapytania boolowe w obrębie dowolnej z tych klauzul boolowych, aby naśladować złożoną logikę logiczną wielopoziomową.

Ten przykład zwraca wszystkie konta, które należą do osób, które mają dokładnie 40 lat i nie mieszkają w Waszyngtonie (w skrócie WA ):

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "WA" } }
      ]
    }
  }
}'
 

Indeksowanie i wyszukiwanie dokumentu

Dostęp do Elasticsearch można uzyskać za pośrednictwem interfejsu API HTTP REST, zwykle przy użyciu biblioteki cURL. Wiadomości między serwerem wyszukiwania a klientem (Twoją lub aplikacją) są wysyłane w postaci ciągów JSON. Domyślnie Elasticsearch działa na porcie 9200.

W poniższych przykładach dodano ?pretty aby poinformować Elasticsearch, aby uściślił odpowiedź JSON. Podczas korzystania z tych punktów końcowych w aplikacji nie trzeba dodawać tego parametru zapytania.

Indeksowanie dokumentów

Jeśli zamierzamy później zaktualizować informacje w indeksie, dobrym pomysłem jest przypisanie unikatowych identyfikatorów do indeksowanych dokumentów. Aby dodać dokument do indeksu o nazwie megacorp , wpisz typ employee i ID 1 uruchom:

curl -XPUT "http://localhost:9200/megacorp/employee/1?pretty" -d'
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}' 
 

Odpowiedź:

{
  "_index": "megacorp",
  "_type": "employee",
  "_id": "1",
  "_version": 1,
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "created": true
}

 

Indeks jest tworzony, jeśli nie istnieje, gdy wysyłamy wywołanie PUT.

Indeksowanie bez identyfikatora

POST /megacorp/employee?pretty
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}
 

Odpowiedź:

{
  "_index": "megacorp",
  "_type": "employee",
  "_id": "AVYg2mBJYy9ijdngfeGa",
  "_version": 1,
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "created": true
}

 

Odzyskiwanie dokumentów

curl -XGET "http://localhost:9200/megacorp/employee/1?pretty"
 

Odpowiedź:

{
  "_index": "megacorp",
  "_type": "employee",
  "_id": "1",
  "_version": 1,
  "found": true,
  "_source": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 25,
    "about": "I love to go rock climbing",
    "interests": [
      "sports",
      "music"
    ]
  }
}

 

Pobierz 10 dokumentów z indeksu megacorp z typem employee :

curl -XGET "http://localhost:9200/megacorp/employee/_search?pretty"
 

Odpowiedź:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1,
    "hits": [
      {
        "_index": "megacorp",
        "_type": "employee",
        "_id": "1",
        "_score": 1,
        "_source": {
          "first_name": "John",
          "last_name": "Smith",
          "age": 25,
          "about": "I love to go rock climbing",
          "interests": [
            "sports",
            "music"
          ]
        }
      },
      {
        "_index": "megacorp",
        "_type": "employee",
        "_id": "AVYg2mBJYy9ijdngfeGa",
        "_score": 1,
        "_source": {
          "first_name": "Jane",
          "last_name": "Smith",
          "age": 32,
          "about": "I like to collect rock albums",
          "interests": [
            "music"
          ]
        }
      }
    ]
  }
}

 

Proste wyszukiwanie za pomocą zapytania o match , które szuka dokładnych dopasowań w polu, pod warunkiem:

curl -XGET "http://localhost:9200/megacorp/employee/_search" -d'
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}'
 

Odpowiedź:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.6931472,
    "hits": [
      {
        "_index": "megacorp",
        "_type": "employee",
        "_id": "1",
        "_score": 0.6931472,
        "_source": {
          "first_name": "John",
          "last_name": "Smith",
          "age": 25,
          "about": "I love to go rock climbing",
          "interests": [
            "sports",
            "music"
          ]
        }
      }
    ]
  }
}

 

Instalowanie Elasticsearch i Kibana na CentOS 7

Aby uruchomić Elasticsearch, na komputerze wymagane jest środowisko Java Runtime Environment (JRE). Elasticsearch wymaga Java 7 lub nowszej i zaleca Oracle JDK version 1.8.0_73 .

Więc upewnij się, że masz Java w swoim systemie. Jeśli nie, postępuj zgodnie z procedurą:

# Install wget with yum 
yum -y install wget

# Download the rpm jre-8u60-linux-x64.rpm for 64 bit 
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jre-8u60-linux-x64.rpm"

# Download the rpm jre-8u101-linux-i586.rpm for 32 bit
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jre-8u101-linux-i586.rpm"

# Install jre-.*.rpm
rpm -ivh jre-.*.rpm
 

Java powinna być już zainstalowana w twoim systemie CentOS. Możesz to sprawdzić za pomocą:

java -version
 

Pobierz i zainstaluj elasticsearch

# Download elasticsearch-2.3.5.rpm 
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.5/elasticsearch-2.3.5.rpm

# Install elasticsearch-.*.rpm
rpm -ivh elasticsearch-.*.rpm   
 

Uruchamianie elasticsearch jako usługi systemowej podczas uruchamiania

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

# check the current status to ensure everything is okay.
systemctl status elasticsearch
 

Instalowanie Kibana

Najpierw zaimportuj klucz GPG na rpm

sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
 

Następnie utwórz lokalne repozytorium kibana.repo

sudo vi /etc/yum.repos.d/kibana.repo 
 

I Dodaj następującą treść:

[kibana-4.4]
name=Kibana repository for 4.4.x packages
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
 

Teraz zainstaluj kibana, wykonując następujące polecenie:

yum -y install kibana
 

Zacznij od:

systemctl start kibana
 

Sprawdź status za pomocą:

systemctl status kibana
 

Możesz uruchomić go jako usługę startową.

systemctl enable kibana
 

Instalowanie Elasticsearch na Ubuntu 14.04


Wymagania wstępne

Aby uruchomić Elasticsearch, na komputerze wymagane jest środowisko Java Runtime Environment (JRE). Elasticsearch wymaga Java 7 lub nowszej i zaleca Oracle JDK version 1.8.0_73 .

Zainstaluj Oracle Java 8

sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections
sudo apt-get install -y oracle-java8-installer
 

Sprawdź wersję Java

java -version
 

Pobierz i zainstaluj pakiet

Korzystanie z plików binarnych

  1. Pobierz najnowszą stabilną wersję Elasticsearch tutaj .
  2. Rozpakuj plik i uruchom

Linux:

$ bin/elasticsearch
 

Korzystanie z apt-get

Alternatywą dla pobierania elasticsearch ze strony jest zainstalowanie go za pomocą apt-get .

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
sudo apt-get update && sudo apt-get install elasticsearch
sudo /etc/init.d/elasticsearch start
 

Instalowanie elasticsearch w wersji 5.x

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get update && sudo apt-get install elasticsearch
 

Działający jako usługa w systemie Linux:

Po instalacji powyższe nie uruchamia się samo. więc musimy uruchomić go jako usługę. Jak uruchomić lub zatrzymać Elasticsearch, zależy od tego, czy Twój system używa SysV init, czy systemd. możesz to sprawdzić za pomocą następującego polecenia.

ps -p 1
 

Jeśli twoja dystrybucja korzysta z SysV init, musisz uruchomić:

sudo update-rc.d elasticsearch defaults 95 10
sudo /etc/init.d/elasticsearch start
 

W przeciwnym razie, jeśli Twoja dystrybucja używa systemud:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
 

Uruchom komendę CURL z przeglądarki lub klienta REST, aby sprawdzić, czy Elasticsearch został poprawnie zainstalowany.

curl -X GET http://localhost:9200/
 

Instalowanie Elasticsearch w systemie Windows

Wymagania wstępne

Wersję Elasticsearch dla systemu Windows można uzyskać pod tym linkiem: https://www.elastic.co/downloads/elasticsearch . Najnowsza stabilna wersja jest zawsze na szczycie.

Podczas instalacji w systemie Windows potrzebujemy archiwum .ZIP . Kliknij link w sekcji Downloads: i zapisz plik na komputerze.

Ta wersja elastyczna jest „przenośna”, co oznacza, że nie trzeba uruchamiać instalatora, aby korzystać z programu. Rozpakuj zawartość pliku do łatwo zapamiętanej lokalizacji. Dla celów demonstracyjnych założymy, że rozpakowałeś wszystko do C:\elasticsearch .

Pamiętaj, że archiwum zawiera domyślnie folder o nazwie elasticsearch-<version> , możesz albo wyodrębnić ten folder do C:\ i zmienić nazwę na elasticsearch albo samodzielnie utworzyć C:\elasticsearch , a następnie rozpakować tylko zawartość folderu w archiwum tam.

Ponieważ Elasticsearch jest napisany w Javie, musi działać w środowisku Java Runtime Environment. Przed uruchomieniem serwera sprawdź, czy Java jest dostępna, otwierając wiersz polecenia i wpisując:

java -version
 

Powinieneś otrzymać odpowiedź, która wygląda następująco:

java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) Client VM (build 25.91-b14, mixed mode)
 

Jeśli zamiast tego zobaczysz następujące informacje

„java” nie jest rozpoznawana jako wewnętrzna lub zewnętrzna komenda, program operacyjny lub plik wsadowy.

Java nie jest zainstalowana w twoim systemie lub nie jest poprawnie skonfigurowana. Możesz wykonać ten samouczek, aby (ponownie) zainstalować Javę. Upewnij się również, że te zmienne środowiskowe są ustawione na podobne wartości:

Zmienna Wartość
JAVA_HOME C: \ Program Files \ Java \ jre
ŚCIEŻKA …; C: \ Program Files \ Java \ jre

Jeśli jeszcze nie wiesz, jak sprawdzić te zmienne, zapoznaj się z tym samouczkiem .

Uruchom z pliku wsadowego

Po zainstalowaniu Java otwórz folder bin . Można go znaleźć bezpośrednio w folderze, do którego rozpakowałeś wszystko, więc powinien znajdować się pod c:\elasticsearch\bin . W tym folderze znajduje się plik o nazwie elasticsearch.bat którego można użyć do uruchomienia Elasticsearch w oknie poleceń. Oznacza to, że informacje zarejestrowane przez proces będą widoczne w oknie wiersza polecenia. Aby zatrzymać serwer, naciśnij CTRL C lub po prostu zamknij okno.

Uruchom jako usługę systemu Windows

W idealnym przypadku nie chcesz mieć dodatkowego okna, którego nie możesz się pozbyć podczas programowania, i z tego powodu Elasticsearch można skonfigurować do działania jako usługa.

Zanim będziemy mogli zainstalować Elasticsearch jako usługę, musimy dodać linię do pliku C:\elasticsearch\config\jvm.options :

Instalator usługi wymaga skonfigurowania rozmiaru stosu wątków w jvm.options przed zainstalowaniem usługi. W 32-bitowym systemie Windows należy dodać -Xss320k […], aw 64-bitowym systemie Windows należy dodać -Xss1m do pliku jvm.options . [źródło]

Po wprowadzeniu tej zmiany otwórz wiersz polecenia i przejdź do katalogu bin , uruchamiając następujące polecenie:

C:\Users\user> cd c:\elasticsearch\bin
 

Zarządzanie usługami jest obsługiwane przez elasticsearch-service.bat . W starszych wersjach plik ten można nazwać po prostu service.bat . Aby zobaczyć wszystkie dostępne argumenty, uruchom je bez żadnych:

C:\elasticsearch\bin> elasticsearch-service.bat

Usage: elasticsearch-service.bat install|remove|start|stop|manager [SERVICE_ID]
 

Dane wyjściowe mówią nam również, że istnieje opcjonalny argument SERVICE_ID , ale na razie możemy go zignorować. Aby zainstalować usługę, po prostu uruchom:

C:\elasticsearch\bin> elasticsearch-service.bat install
 

Po zainstalowaniu usługi można ją uruchomić i zatrzymać za pomocą odpowiednich argumentów. Aby uruchomić usługę, uruchom

C:\elasticsearch\bin> elasticsearch-service.bat start
 

i żeby to zatrzymać, biegnij

C:\elasticsearch\bin> elasticsearch-service.bat stop
 

Jeśli zamiast tego wolisz GUI do zarządzania usługą, możesz użyć następującego polecenia:

C:\elasticsearch\bin> elasticsearch-service.bat manager
 

Spowoduje to otwarcie Elastic Service Manager, który pozwala dostosować niektóre ustawienia związane z usługami, a także zatrzymać / uruchomić usługę za pomocą przycisków znajdujących się na dole pierwszej karty.