Centos 7 安裝ElasticSearch 6.4.1和入門(mén)教程

[TOC]

1.下載ElasticSearch 6.4.1安裝包 下載地址:

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.1.tar.gz

2.解壓壓縮包

[root@localhost ElasticSearch]# tar -zxvf elasticsearch-6.4.1.tar.gz

3.啟動(dòng)ElasticSearch

[root@localhost bin]# ./elasticsearch

以后臺(tái)方式啟動(dòng)

[root@localhost bin]# ./elasticsearch  -d

TIPS:

[root@localhost bin]# ./elasticsearch
[2018-09-19T19:46:09,817][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:140) ~[elasticsearch-6.4.1.jar:6.4.1]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[elasticsearch-6.4.1.jar:6.4.1]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.4.1.jar:6.4.1]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.4.1.jar:6.4.1]
    at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.4.1.jar:6.4.1]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.4.1.jar:6.4.1]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.4.1.jar:6.4.1]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.4.1.jar:6.4.1]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.4.1.jar:6.4.1]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) ~[elasticsearch-6.4.1.jar:6.4.1]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.4.1.jar:6.4.1]

ElasticSearch 不能以root用戶(hù)角色啟動(dòng),因此需要將安裝目錄授權(quán)給其他用戶(hù),用其他用戶(hù)來(lái)啟動(dòng)


image

啟動(dòng)成功后,驗(yàn)證,打開(kāi)新的終端,執(zhí)行如下命令:

[root@localhost ~]# curl 'http://localhost:9200/?pretty'
{
  "name" : "O5BAVYE",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "rw1yjlzkSgODXkUVgIxmxg",
  "version" : {
    "number" : "6.4.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "e36acdb",
    "build_date" : "2018-09-13T22:18:07.696808Z",
    "build_snapshot" : false,
    "lucene_version" : "7.4.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}
[root@localhost ~]# 

返回信息則表示安裝成功!

4.安裝Kibana

Sense 是一個(gè) Kibana 應(yīng)用 它提供交互式的控制臺(tái),通過(guò)你的瀏覽器直接向 Elasticsearch 提交請(qǐng)求。 這本書(shū)的在線(xiàn)版本包含有一個(gè) View in Sense 的鏈接,里面有許多代碼示例。當(dāng)點(diǎn)擊的時(shí)候,它會(huì)打開(kāi)一個(gè)代碼示例的Sense控制臺(tái)。 你不必安裝 Sense,但是它允許你在本地的 Elasticsearch 集群上測(cè)試示例代碼,從而使本書(shū)更具有交互性。

下載kibana

Kibana是一個(gè)為 ElasticSearch 提供的數(shù)據(jù)分析的 Web 接口??墒褂盟鼘?duì)日志進(jìn)行高效的搜索、可視化、分析等各種操作

https://artifacts.elastic.co/downloads/kibana/kibana-6.4.1-linux-x86_64.tar.gz

下載完成解壓Kibana

[root@localhost ElasticSearch]# tar -zxvf kibana-6.4.1-linux-x86_64.tar.gz 

修改 配置config目錄下的kibana.yml 文件,配置elasticsearch地址和kibana地址信息

server.host: "192.168.92.50"  # kibana 服務(wù)器地址
elasticsearch.url: "http://192.168.92.50:9200"    # ES 地址

啟動(dòng) Kibana

[root@localhost bin]# ./kibana

安裝Kibana本機(jī)訪(fǎng)問(wèn):

http://localhost:5601/
image

選擇Dev Tools菜單,即可實(shí)現(xiàn)可視化請(qǐng)求


image

5.安裝LogStash

下載logStash

https://artifacts.elastic.co/downloads/logstash/logstash-7.0.1.tar.gz

下載完成解壓后,config目錄下配置日志收集日志配置文件 logstash.conf

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  tcp {
    mode => "server"
    host => "192.168.92.50"
    port => 4560
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => "192.168.92.50:9200"
    index => "springboot-logstash-%{+YYYY.MM.dd}"
  }
}

配置成功后啟動(dòng)logstatsh

[root@localhost bin]# ./logstash -f ../config/logstash.conf 

ES 一些基礎(chǔ)知識(shí):



索引(名詞):

如前所述,一個(gè) 索引 類(lèi)似于傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)中的一個(gè) 數(shù)據(jù)庫(kù) ,是一個(gè)存儲(chǔ)關(guān)系型文檔的地方。 索引 (index) 的復(fù)數(shù)詞為 indices 或 indexes 。

索引(動(dòng)詞):

索引一個(gè)文檔 就是存儲(chǔ)一個(gè)文檔到一個(gè) 索引 (名詞)中以便它可以被檢索和查詢(xún)到。這非常類(lèi)似于 SQL 語(yǔ)句中的 INSERT 關(guān)鍵詞,除了文檔已存在時(shí)新文檔會(huì)替換舊文檔情況之外。

倒排索引:

關(guān)系型數(shù)據(jù)庫(kù)通過(guò)增加一個(gè) 索引 比如一個(gè) B樹(shù)(B-tree)索引 到指定的列上,以便提升數(shù)據(jù)檢索速度。Elasticsearch 和 Lucene 使用了一個(gè)叫做 倒排索引 的結(jié)構(gòu)來(lái)達(dá)到相同的目的。
PUT /megacorp/employee/1
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}

返回結(jié)果:

#! Deprecation: the default number of shards will change from [5] to [1] in 7.0.0; if you wish to continue using the default of [5] shards, you must manage this on the create index request or with an index template
{
  "_index": "megacorp",
  "_type": "employee",
  "_id": "1",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}

路徑 /megacorp/employee/1 包含了三部分的信息:

megacorp 索引名稱(chēng)

employee 類(lèi)型名稱(chēng)

1 特定雇員的ID
放置第二個(gè)雇員信息:

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

返回結(jié)果:

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

放置第三個(gè)雇員信息

{
  "_index": "megacorp",
  "_type": "employee",
  "_id": "3",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}

5.檢索文檔

檢索到單個(gè)雇員的數(shù)據(jù)

GET /megacorp/employee/1

返回結(jié)果:

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

6.輕量搜索

一個(gè) GET 是相當(dāng)簡(jiǎn)單的,可以直接得到指定的文檔。 現(xiàn)在嘗試點(diǎn)兒稍微高級(jí)的功能,比如一個(gè)簡(jiǎn)單的搜索!

第一個(gè)嘗試的幾乎是最簡(jiǎn)單的搜索了。我們使用下列請(qǐng)求來(lái)搜索所有雇員:

GET /megacorp/employee/_search

返回結(jié)果:

{
  "took": 31,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 3,
    "max_score": 1,
    "hits": [
      {
        "_index": "megacorp",
        "_type": "employee",
        "_id": "2",
        "_score": 1,
        "_source": {
          "first_name": "Jane",
          "last_name": "Smith",
          "age": 32,
          "about": "I like to collect rock albums",
          "interests": [
            "music"
          ]
        }
      },
      {
        "_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": "3",
        "_score": 1,
        "_source": {
          "first_name": "Douglas",
          "last_name": "Fir",
          "age": 35,
          "about": "I like to build cabinets",
          "interests": [
            "forestry"
          ]
        }
      }
    ]
  }
}

通過(guò)姓名模糊匹配來(lái)獲得結(jié)果

GET /megacorp/employee/_search?q=last_name:Smith

返回結(jié)果:

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

7.使用查詢(xún)表達(dá)式搜索

領(lǐng)域特定語(yǔ)言 (DSL), 指定了使用一個(gè) JSON 請(qǐng)求

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}

返回結(jié)果:

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

8.更復(fù)雜的搜索

搜索姓氏為 Smith 的雇員,但這次我們只需要年齡大于 30 的,使用過(guò)濾器 filter ,它支持高效地執(zhí)行一個(gè)結(jié)構(gòu)化查詢(xún)

GET /megacorp/employee/_search
{
    "query" : {
        "bool": {
            "must": {
                "match" : {
                    "last_name" : "smith" 
                }
            },
            "filter": {
                "range" : {
                    "age" : { "gt" : 30 } 
                }
            }
        }
    }
}

其中:range 過(guò)濾器 , 它能找到年齡大于 30 的文檔,其中 gt 表示_大于(_great than)

返回結(jié)果:

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

9.全文搜索

搜索下所有喜歡攀巖(rock climbing)的雇員

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "about" : "rock climbing"
        }
    }
}

返回結(jié)果:

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

10.全文搜索

找出一個(gè)屬性中的獨(dú)立單詞是沒(méi)有問(wèn)題的,但有時(shí)候想要精確匹配一系列單詞或者短語(yǔ) 。 比如, 我們想執(zhí)行這樣一個(gè)查詢(xún),僅匹配同時(shí)包含 “rock” 和 “climbing” ,并且 二者以短語(yǔ) “rock climbing” 的形式緊挨著的雇員記錄。

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    }
}

返回結(jié)果:

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

11.高亮搜索

許多應(yīng)用都傾向于在每個(gè)搜索結(jié)果中 高亮 部分文本片段,以便讓用戶(hù)知道為何該文檔符合查詢(xún)條件。在 Elasticsearch 中檢索出高亮片段也很容易。
增加參數(shù): highlight

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    },
    "highlight": {
        "fields" : {
            "about" : {}
        }
    }
}

返回結(jié)果:

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

其中高亮模塊為highlight屬性

12.分析

Elasticsearch 有一個(gè)功能叫聚合(aggregations),允許我們基于數(shù)據(jù)生成一些精細(xì)的分析結(jié)果。聚合與 SQL 中的 GROUP BY 類(lèi)似但更強(qiáng)大。
舉個(gè)例子,挖掘出雇員中最受歡迎的興趣愛(ài)好:

GET /megacorp/employee/_search
{
  "aggs": {
    "all_interests": {
      "terms": { "field": "interests" }
    }
  }
}

返回結(jié)果:

{
   ...
   "hits": { ... },
   "aggregations": {
      "all_interests": {
         "buckets": [
            {
               "key":       "music",
               "doc_count": 2
            },
            {
               "key":       "forestry",
               "doc_count": 1
            },
            {
               "key":       "sports",
               "doc_count": 1
            }
         ]
      }
   }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容