我這裡使用的環境是 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
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
修改 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
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.
按照註釋配置該檔案即可。
複製 elasticsearch 服務,分別命名為 node1 node2 ,這裡我配置3個節點
分別修改3個服務的 elasticsearch.yml 檔案,這裡我以其中一個為例
cluster.name: es
node.name: node-1
network.host: 192.168.31.199
http.port: 9200
transport.port: 9300
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
修改配置檔案
'driver' => env('SCOUT_DRIVER', 'elasticsearch'),
'elasticsearch' => [
'index' => 'article',
'hosts' => '192.168.31.199:9200',
]
]
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
php artisan make:command initEs
public function handle()
{
$client = new Client();
$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'
使用 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 協議》,轉載必須註明作者和本文連結