Elasticsearch 安裝和使用

Tao發表於2020-04-17
我這裡使用的環境是 ubuntu18.04 
把壓縮包移動到你想要的安裝目錄解壓縮
tar -zxvf elasticsearch-7.6.2-linux-x86_64.tar.gz
es 7.+ 版本後不需要下載 jdk 環境,壓縮包自帶了環境,只需要配置 java 環境變數
修改環境變數 
vim /etc/profile 
將下列新增到末尾
export JAVA_HOME=/home/vagrant/elasticsearch-7.6.2/jdk // 這裡的路徑是 elasticsearch/jdk 的路徑
export JRE_HOME=/${JAVA_HOME}
export CLASSPATH=.:${JAVA_HOME}/libss:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH 
執行
source  /etc/profile 
檢視 java -version 版本 
openjdk version "13.0.2" 2020-01-14
OpenJDK Runtime Environment AdoptOpenJDK (build 13.0.2+8)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 13.0.2+8, mixed mode, sharing)
說明配置成功 
  • 啟動
es 不能使用 root 使用者啟動
新建使用者 useradd es
設定使用者密碼 passwd  es 
更改 es 使用者組 chown -R es.es elasticsearch-7.6.2
切換使用者 su es  切換到 es/bin 目錄下 
啟動 es 
./elasticsearch  
後臺啟動 ./elasticsearch -d
  • 開啟 es 遠端連線許可權
修改 config 中 elasticsearch.yml
network.host: 0.0.0.0
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
切換到 root 使用者 
 vim /etc/security/limits.conf
*          soft     nofile      65536
*          hard     nofile      65536
*          soft     nproc       4096
*          hard     nproc       4096
通過以下命令檢視是否生效
ulimit -Hn
ulimit -Hu
ulimit -Sn
ulimit -Su
修改  /etc/sysctl.conf 檔案
末尾新增 vm.max_map_count=262144
執行 sysctl -p 生效配置
然後切換回 es 使用者 重新啟動 es 即可
啟動後會有一個警告關於 主節點為發現  可以修改 elasticsearch.yml
node.name: node-1
cluster.initial_master_nodes: ["node-1"]
再次啟動即可
解壓 tar -zxvf kibana-7.6.2-linux-x86_64.tar.gz
修改 kibana.yml 檔案
server.host: "192.168.111.198"
elasticsearch.hosts: ["http://192.168.111.198:9200"]
啟動 kibana  bin 目錄下執行 ./kibana
啟動 kibana 後,發現 es 自動 killed  可能是記憶體不足
需要修改 jvm.options 檔案
cd /elasticsearch/config  
vim jvm.options
-Xms1g  
-Xmx1g
都改為 -Xms512m
  • 安裝 ik 中文分詞 ik
1. 線上安裝
在 es bin 目錄下 執行, 要切換到可以執行 es 的使用者上
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
其中版本號換成你自己的 es 版本,下載速度取決於你的網速
2. 本地安裝 
選擇對應 es 版本的包
在 elasticsearch/plugins 目錄下 新建 ik 目錄 mkdir ik 
移動包 到 ik 目錄,然後解壓包 unzip 
重啟 es 即可

ik 有 2 中分詞型別 
ik_smart ik_max_word 
比如市場營銷這個詞
ik_smart 認為是一個詞,不會進行分詞
ik_max_word 會分為 市場、營銷、市場營銷 3個詞
選擇哪種型別根據自己的需求來

ik 配置分詞詞典, 在 es 的 plugins/ik/config 下 有個 IKAnalyzer.cfg.xml.
按照註釋配置該檔案即可。
  • 配置 Es 叢集
複製 elasticsearch 服務,分別命名為 node1 node2 ,這裡我配置3個節點
分別修改3個服務的 elasticsearch.yml 檔案,這裡我以其中一個為例
cluster.name: es  // 必須一樣
node.name: node-1 // 必須不一樣,相當於該節點的名字
network.host: 192.168.31.199 // 你的 ip 地址
http.port: 9200 // 必須不一樣
transport.port: 9300 // 必須不一樣
// 該節點訪問其他節點的 ip 地址,使用 transport.port 埠
discovery.seed_hosts: ["192.168.31.198:9301", "192.168.31.198:9302"]
cluster.initial_master_nodes: ["node-1"] // 主節點名稱 
gateway.recover_after_nodes: 3 // 節點個數
3臺服務都配置完成後,啟動服務
然後在 kibana 中 呼叫 
GET /_cat/health?v
返回的資訊中:
//叢集名稱            叢集狀態               節點個數
cluster              status                node.total 
es                    green                    3         
說明叢集配置成功

laravel 使用 ELasticsearch

安裝依賴包
composer require tamayo/laravel-scout-elastic
生成配置檔案
php artisan vendor:publish  選擇 laravel/scout
修改配置檔案
// 驅動修改為 elasticsearch
'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
// 新增 elasticsearch 配置項
'elasticsearch' => [
        'index' =>  'article',
        'hosts' => '192.168.31.199:9200', // 此處 ip 為你的 es 配置ip 
        ]
    ]
// 新增模型配置
 use  Searchable;
// 獲取模型的可搜尋資料
public function toSearchableArray()
 {
     return [
         'title' => $this->title,
         'content' => $this->content,
         'id' => $this->id,
         'price' => $this->price
     ];
 }
 // 資料庫索引的型別
 public function searchableAs()
 {
     return '_doc';
 }


在app.PHP中新增對應的 ServiceProvider
Laravel\Scout\ScoutServiceProvider::class,
ScoutEngines\Elasticsearch\ElasticsearchProvider::class

// 向 es 中新增索引, 可以在 kibana 中建立索引,也可以建立命令來完成 es 初始化。這裡我選擇建立命令
php artisan make:command initEs

public function handle()
 {
       $client =  new Client();
       //  請求地址為你的 es host 後面的 article 就是索引,與 es 配置中的 index 一致。
        $url = 'http://192.168.31.199:9200/article';
        $client->put($url, [
            'json' => [
                'mappings' => [
                    "properties" => [
                        "content" => [
                            "type" => "text",
                            "analyzer" => "ik_max_word",
                            "fields" => [
                                "keyword" => [
                                    "type" => "keyword",
                                    "ignore_above" => 256
                                ]
                            ]
                        ],
                        "title" => [
                            "type" => "text",
                            "analyzer" => "ik_max_word",
                            "fields" => [
                                "keyword" => [
                                    "type" => "keyword",
                                    "ignore_above" => 256
                                ]
                            ]
                        ]
                    ]
                ]
            ]
        ]);
    }

執行 PHP artisan scout:import 'App\Article' // 匯入資料庫到 es
// 查詢資料
使用  Article::search($query)->get();

相關的模型增加、刪除等操作請檢視文件

Scout 全文搜尋

  • 高亮顯示
$client = ClientBuilder::create()->setHosts(['192.168.31.198:9200'])->build();
        $res = $client->search([
            'index' => 'article',
            'type' => '_doc',
            'body' => [
                'query' => [
                    'multi_match' =>[
                        'query' => '市場營銷',  //引數
                        'fields' => ['title', 'content']
                    ]
                ],
                'highlight' => [
                    'fields' => ['*' => (object)[]],
                    'pre_tags' => ['<span>'],
                    'post_tags' => ["</span>"]
                ]
            ]
        ]);

$res 返回的是 json 資料,自行拼接想要的資料即可
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章