Docker 中 Elasticsearch 添加 IK 分詞器以及 Kibana 的部署和使用
1. Docker 中 Elasticsearch 添加 IK 分詞器
如果需要下載其他版本:
https://github.com/medcl/elasticsearch-analysis-ik/releases
進入容器後運行
cd plugins/
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.12/elasticsearch-analysis-ik-5.6.12.zip;
unzip elasticsearch-analysis-ik-5.6.12.zip;
mv elasticsearch ik;
rm -rf elasticsearch-analysis-ik-5.6.12.zip;
推出重啓容器, 訪問下面的 URL
http://192.168.19.129:9200/_analyze?analyzer=ik_smart&pretty=true&text=我是程序員
2. Kibana 的部署和使用
部署
docker pull kibana:5.6.12;
docker run -it -d -p 5601:5601 -e ELASTICSEARCH_URL=http://192.168.19.129:9200 --name=kibana kibana:5.6.12;
訪問
http://192.168.19.129:5601/
2.1 基本用法
# 新增索引庫
PUT /user
# 獲取所有索引庫信息
GET _cat/indices
# 刪除索引庫
DELETE /user
# 添加映射
PUT /user/userinfo/_mapping
{
"properties": {
"name": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
},
"city": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
},
"age": {
"type": "long",
"store": false
},
"description": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart",
"store": false
}
}
}
# 添加文本數據 id=1
PUT /user/userinfo/1
{
"name": "張三",
"city": "上海",
"age": 20,
"description": "張三是一名是中國上海人"
}
# 添加文本數據 id=2
PUT /user/userinfo/2
{
"name": "李四",
"city": "北京",
"age": 25,
"description": "李四到北京實習"
}
# 根據 ID 查詢數據 id=2
GET /user/userinfo/2
# 更新文本數據 id=2 (原理: 刪除原始數據, 新增數據)
PUT /user/userinfo/2
{
"age": 30,
"description": "李四在北京工作"
}
# 更新數據, 直接修改指定域的數據.
POST /user/userinfo/2/_update
{
"doc": {
"age": 45,
"description": "李四在北京工作, 當上 CEO."
}
}
# 查詢索所有數據
GET _search
# 查詢索引庫所有數據
GET /user/_search
# 查詢索引庫下文檔所有數據
GET /user/userinfo/_search
# 根據 age 降序排列
GET /user/userinfo/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
# 分頁查詢
GET /user/userinfo/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"from": 0,
"size": 1
}
2.2 過濾查詢
# 詞項搜索 Term
GET /user/userinfo/_search
{
"query": {
"term": {
"city": {
"value": "上海"
}
}
}
}
# 多個詞項搜索 Terms
GET /user/userinfo/_search
{
"query": {
"terms": {
"city": [
"上海",
"北京"
]
}
}
}
# 範圍過濾搜索
GET /user/userinfo/_search
{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 26
}
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
# 範圍存在域的數據
GET /user/userinfo/_search
{
"query": {
"exists": {
"field": "age"
}
}
}
# bool 過濾數據
# must ==> and, must_not ==> not, should ==> or.
GET /user/userinfo/_search
{
"query": {
"bool": {
"must": [
{
"terms": {
"city": [
"上海",
"北京"
]
}
},
{
"range": {
"age": {
"gte": 10,
"lte": 20
}
}
}
]
}
}
}
# 查詢所有
GET /user/userinfo/_search
{
"query": {
"match_all": {}
}
}
# 字符串查詢
GET /user/userinfo/_search
{
"query": {
"match": {
"description": "北京"
}
}
}
# 多個域字符串查詢
GET /user/userinfo/_search
{
"query": {
"multi_match": {
"query": "北京",
"fields": [
"city",
"description"
]
}
}
}
3. Kibana 7+ 版本
需要進入容器將
kibana.yml
文件中的http://elasticsearch:9200
改成自己的 Elasticsearch 的地址連接
vi config/kibana.yml
關於使用, 只有一點區別, 就是 7 版本以上
去除了
type
, 提高了搜索. 8 版本可以設置是否啓動 type. 其他的基本上一樣