ElasticsearchKomma igång med Elasticsearch


Anmärkningar

Elasticsearch är en avancerad sökningsserver med öppen källkod baserad på Lucene och skriven i Java.

Det tillhandahåller distribuerad fullständig och partiell text-, frågebaserad och geolokationsbaserad sökfunktion som är tillgänglig via ett HTTP REST API.

versioner

Version Utgivningsdatum
5.2.1 2017/02/14
5.2.0 2017/01/31
5.1.2 2017/01/12
5.1.1 2016/12/08
5.0.2 2016/11/29
5.0.1 2016/11/15
5.0.0 2016/10/26
2.4.0 2016/08/31
2.3.0 2016/03/30
2.2.0 2016/02/02
2.1.0 2015/11/24
2.0.0 2015/10/28
1.7.0 2015/07/16
1.6.0 2015/06/09
1.5.0 2015/03/06
1.4.0 2014/11/05
1.3.0 2014/07/23
1.2.0 2014/05/22
1.1.0 2014/03/25
1.0.0 2014/02/14

Grundläggande sökparametrar med exempel:

Som standard returneras det fullständiga indexerade dokumentet som en del av alla sökningar. Detta kallas källan ( _source i sökträffarna). Om vi inte vill att hela källdokumentet ska returneras, kan vi begära att endast ett fåtal fält från källan ska returneras, eller vi kan ställa _source till falskt för att utesluta fältet helt.

Detta exempel visar hur du returnerar två fält, account_number och balance (inuti _source ), från sökningen:

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

Observera att exemplet ovan helt enkelt minskar informationen som returneras i fältet _source . Det kommer fortfarande bara att returnera ett fält med namnet _source men bara fälten account_number och balance kommer att inkluderas.

Om du kommer från en SQL-bakgrund, är ovanstående något liknande i konceptet som SQL-frågan

SELECT account_number, balance FROM bank;
 

Låt oss nu gå vidare till frågeställningen. Tidigare har vi sett hur match_all frågan används för att matcha alla dokument. Låt oss nu introducera en ny fråga som heter matchningsfrågan, som kan betraktas som en grundläggande fältfritt sökfråga (dvs. en sökning gjord mot ett specifikt fält eller uppsättning fält).

Detta exempel returnerar kontot med account_number inställt på 20 :

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

Detta exempel returnerar alla konton som innehåller termen "kvarn" i address :

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

Detta exempel returnerar alla konton som innehåller termen "kvarn" eller "körfält" i address :

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

Detta exempel är en variant av match ( match_phrase ) som delar upp frågan i termer och bara returnerar dokument som innehåller alla termer i address i samma positioner relativt varandra [1] .

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

Låt oss nu introducera frågan om bool (ean). Med boolfrågan kan vi komponera mindre frågor till större frågor med hjälp av booleska logik.

Detta exempel komponerar två matchningsfrågor och returnerar alla konton som innehåller "kvarn" och "körfält" i adressen:

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

I exemplet ovan specificerar bool must klausul alla frågor som måste vara sanna för att ett dokument ska betraktas som en matchning.

Däremot komponerar detta exempel två matchningsfrågor och returnerar alla konton som innehåller "kvarn" eller "körfält" i address :

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

I ovanstående exempel bool should instruktionen anger en lista med frågor som båda måste vara sant för ett dokument som ska betraktas som en match.

Detta exempel består av två matchningsfrågor och returnerar alla konton som varken innehåller "kvarn" eller "körfält" i address :

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

I exemplet ovan anger bool must_not-klausulen en lista med frågor som inte måste vara sanna för att ett dokument ska betraktas som en matchning.

Vi kan kombinera klausuler om måste, ska och inte måste samtidigt inne i en boolfråga. Dessutom kan vi komponera boolfrågor i någon av dessa bool-klausuler för att efterlikna alla komplexa booleska logik på flera nivåer.

Detta exempel returnerar alla konton som tillhör personer som är exakt 40 år gamla och inte bor i Washington ( WA för kort):

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

Indexera och hämta ett dokument

Elasticsearch nås via ett HTTP REST API, vanligtvis med hjälp av cURL-biblioteket. Meddelandena mellan sökservern och klienten (din eller din applikation) skickas i form av JSON-strängar. Som standard körs Elasticsearch på port 9200.

I exemplen nedan ?pretty tillsätts för att berätta Elasticsearch att försköna JSON svar. När du använder dessa slutpunkter i en applikation behöver du inte lägga till denna frågeparameter.

Indexera dokument

Om vi tänker uppdatera information inom ett index senare är det en bra idé att tilldela unika ID till de dokument vi indexerar. Så här lägger du till ett dokument till indexet med namnet megacorp , med typ av employee och ID 1 körning:

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" ]
}' 
 

Svar:

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

 

Indexet skapas om det inte finns när vi skickar PUT-samtalet.

Indexering utan ID

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

Svar:

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

 

Hämtar dokument

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

Svar:

{
  "_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"
    ]
  }
}

 

Hämta 10 dokument från megacorp indexet med typen employee :

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

Svar:

{
  "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"
          ]
        }
      }
    ]
  }
}

 

Enkel sökning med match , som letar efter exakta matchningar i det angivna fältet:

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

Svar:

{
  "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"
          ]
        }
      }
    ]
  }
}

 

Installera Elasticsearch och Kibana på CentOS 7

För att köra Elasticsearch krävs en Java Runtime Environment (JRE) på maskinen. Elasticsearch kräver Java 7 eller högre och rekommenderar Oracle JDK version 1.8.0_73 .

Så var säker på om du har Java i ditt system. Om inte, följ sedan proceduren:

# 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 bör nu installeras i ditt centOS-system. Du kan kontrollera det med:

java -version
 

Ladda ner och installera 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   
 

Kör elasticsearch som systemdjänst vid uppstart

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

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

Installera Kibana

Importera först GPG-nyckel på varv per minut

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

kibana.repo ett lokalt kibana.repo arkiv

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

Och lägg till följande innehåll:

[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
 

Installera nu kibana genom att följa kommandot:

yum -y install kibana
 

Börja med:

systemctl start kibana
 

Kontrollera status med:

systemctl status kibana
 

Du kan köra den som en starttjänst.

systemctl enable kibana
 

Installera Elasticsearch på Ubuntu 14.04


förutsättningar

För att köra Elasticsearch krävs en Java Runtime Environment (JRE) på maskinen. Elasticsearch kräver Java 7 eller högre och rekommenderar Oracle JDK version 1.8.0_73 .

Installera 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
 

Kontrollera Java-versionen

java -version
 

Ladda ner och installera paketet

Använda binärer

  1. Ladda ner den senaste stabila versionen av Elasticsearch här .
  2. Packa upp filen och kör

Linux:

$ bin/elasticsearch
 

Med apt-get

Ett alternativ till att ladda ner elasticsearch från webbplatsen är att installera det med 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
 

Installera elasticsearch version 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
 

Kör som en tjänst på Linux:

Efter installationen startar ovanstående inte sig själv. så vi måste starta det som en tjänst. Hur man startar eller stoppar Elasticsearch beror på om ditt system använder SysV init eller systemd. Du kan kontrollera det med följande kommando.

ps -p 1
 

Om din distribution använder SysV init, måste du köra:

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

Annars om din distribution använder systemd:

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

Kör CURL kommandot från din webbläsare eller en REST-klient för att kontrollera om Elasticsearch har installerats korrekt.

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

Installera Elasticsearch på Windows

förutsättningar

Windows-versionen av Elasticsearch kan erhållas från den här länken: https://www.elastic.co/downloads/elasticsearch . Den senaste stabila versionen är alltid överst.

När vi installerar på Windows behöver vi .ZIP arkivet. Klicka på länken i Downloads: och spara filen på din dator.

Denna version av elastisk är "portabel", vilket betyder att du inte behöver köra ett installationsprogram för att använda programmet. Packa upp innehållet i filen till en plats som du lätt kommer ihåg. För demonstration antar vi att du har packat upp allt till C:\elasticsearch .

Observera att arkivet innehåller en mapp med namnet elasticsearch-<version> standard, du kan antingen extrahera den mappen till C:\ och byta namn på den till elasticsearch eller skapa C:\elasticsearch själv och sedan packa upp bara innehållet i mappen i arkivet där.

Eftersom Elasticsearch är skriven i Java, behöver den Java Runtime Environment för att fungera. Så innan du kör servern, kontrollera om Java är tillgängligt genom att öppna en kommandotolk och skriva:

java -version
 

Du bör få ett svar som ser ut så här:

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)
 

Om du ser följande i stället

'java' känns inte igen som ett internt eller externt kommando, operativt program eller batchfil.

Java är inte installerat på ditt system eller konfigureras inte korrekt. Du kan följa denna handledning för att (installera) Java igen. Se också till att dessa miljövariabler är inställda på liknande värden:

Variabel Värde
JAVA_HOME C: \ Programfiler \ Java \ jre
VÄG ...; C: \ Programfiler \ Java \ jre

Om du ännu inte vet hur du ska inspektera dessa variabler, se denna handledning .

Kör från batchfil

När Java är installerat öppnar du bin . Den kan hittas direkt i mappen som du har packat upp allt till, så den ska vara under c:\elasticsearch\bin . Inom den här mappen finns en fil som heter elasticsearch.bat som kan användas för att starta Elasticsearch i ett kommandofönster. Detta innebär att information som är inloggad genom processen kommer att synas i kommandotolken. För att stoppa servern, tryck på CTRL C eller stäng bara fönstret.

Kör som en Windows-tjänst

Helst vill du inte ha ett extra fönster som du inte kan bli av med under utvecklingen, och av denna anledning kan Elasticsearch konfigureras för att fungera som en tjänst.

Innan vi kunde installera Elasticsearch som en tjänst måste vi lägga till en rad i filen C:\elasticsearch\config\jvm.options :

Serviceinstallatören kräver att inställningen för jvm.options konfigureras i jvm.options innan du installerar tjänsten. På 32-bitars Windows bör du lägga till -Xss320k [...] och på 64-bitars Windows ska du lägga till -Xss1m till jvm.options filen. [källa]

När du har gjort den ändringen öppnar du en kommandotolk och navigerar till bin genom att köra följande kommando:

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

Servicehantering hanteras av elasticsearch-service.bat . I äldre versioner kan den här filen helt enkelt kallas service.bat . Om du vill se alla tillgängliga argument kör du det utan några:

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

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

Utdata säger också att det finns ett valfritt SERVICE_ID argument, men vi kan ignorera det för tillfället. För att installera tjänsten, kör bara:

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

När du har installerat tjänsten kan du starta och stoppa den med respektive argument. Starta tjänsten genom att köra

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

och för att stoppa det, kör

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

Om du föredrar att ett GUI ska hantera tjänsten istället kan du använda följande kommando:

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

Detta öppnar Elastic Service Manager, som gör att du kan anpassa vissa tjänstrelaterade inställningar samt stoppa / starta tjänsten med hjälp av knapparna som finns längst ner på den första fliken.