手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

ElasticSearch学习笔记(一)

时间:2021/6/10 22:09:52|来源:|点击: 次

目录

    • 相关资料
    • 安装
    • 基本概念
    • 检索文档
    • 更新文档
    • 删除文档
    • 批量操作
    • 进阶检索
      • search API
      • 聚合
    • mapping
    • 数据迁移
    • 分词器
      • 标准分词器
      • ik分词器

相关资料

官网

https://www.elastic.co/cn/elasticsearch/

参考资料

https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

getting started

https://www.elastic.co/guide/en/elasticsearch/reference/6.0/getting-started.html

安装

基本概念

索引(名词):

如前所述,一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方。 索引 (index) 的复数词为 indices 或 indexes 。

索引(动词):

索引一个文档 就是存储一个文档到一个 索引 (名词)中以便被检索和查询。这非常类似于 SQL 语句中的 INSERT 关键词,除了文档已存在时,新文档会替换旧文档情况之外。

倒排索引:

关系型数据库通过增加一个 索引 比如一个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的。

默认的,一个文档中的每一个属性都是 被索引 的(有一个倒排索引)和可搜索的。一个没有倒排索引的属性是不能被搜索到的。我们将在 倒排索引 讨论倒排索引的更多细节。

_cat

# 查看所有节点
GET _cat/nodes
# 查看es健康状况
GET _cat/health
# 查看主节点
GET _cat/master
# 查看所有索引
GET _cat/indices

GET

GET 可以用来检索文档。

DELETE

DELETE 命令用来删除文档。

HEAD

使用 HEAD 指令来检查文档是否存在。

PUT

新增、更新文档。

POST

新增、更新文档。

检索文档

GET 索引/类型/id

结果:

_index: 索引
_type: 类型
_id: id
_version: 版本
# 如在更新请求后添加?if_seq_no=0&if_primary_term=1
_seq_no: 并发控制字段,用作乐观锁,每次更新+1
_primary_term: 并发控制字段,用作乐观锁,主分片重新分配时变化
found: 是否找到数据
_source: 真正的内容

更新文档

# 直接进行新增/更新操作
POST/PUT 索引/类型/id
{
	"key": value
}
# 带_update会与原数据对比,与原来一样则不做任何操作
POST 索引/类型/id/_update
{
	"doc": {
		"key": value
	}
}

删除文档

DELETE 索引[/类型/id]

批量操作

# action:index(保存)|create(创建)|delete(删除)|update(更新)
POST 索引/类型/_bulk
{"action": metadata}
{request body}

进阶检索

search API

1、match_all、sort、from、size、_source

# match_all:查询所有的文档
# sort:排序
# from:查找从0开始的记录
# size:查找3条记录
# _source:需要查找的字段
GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "account_number": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 3,
  "_source": [
    "firstname",
    "balance"
  ]
}

2、match

# match:全文检索,按照评分进行排序,对检索条件进行分词匹配
GET bank/_search
{
  "query": {
    "match": {
      "address": "mill"
    }
  }
}

3、match_phrase

# 短语匹配,不进行分词
GET bank/_search
{
  "query": {
    "match_phrase": {
      "address": "mill road"
    }
  }
}

4、muti_match

# 多字段匹配
GET bank/_search
{
  "query": {
    "multi_match": {
      "query": "mill lopezo",
      "fields": [
        "address",
        "city"
      ]
    }
  }
}

5、bool

# 复合查询
# must、should会影响分数
# filter不影响分数
GET bank/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "M"
          }
        },
        {
          "match": {
            "address": "mill"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "age": 18
          }
        }
      ],
      "should": [
        {
          "match": {
            "firstname": "Forbes"
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "gte": 20,
            "lte": 30
          }
        }
      }
    }
  }
}

6、term、match+keyword

# 精确匹配,会进行分词
GET bank/_search
{
  "query": {
    "term": {
      "address": "990 Mill Road"
    }
  }
}
# 精确匹配,当做关键字,不进行分词
GET bank/_search
{
  "query": {
    "match": {
      "address.keyword": "990 Mill Road"
    }
  }
}

聚合

"aggregations" : {
    "<aggregation_name>" : {
        "<aggregation_type>" : {
            <aggregation_body>
        }
        [,"meta" : {  [<meta_data_body>] } ]?
        [,"aggregations" : { [<sub_aggregation>]+ } ]?
    }
    [,"<aggregation_name_2>" : { ... } ]*
}

mapping

查看索引bank的映射

GET bank/_mapping

添加映射

PUT /my-index-000001
{
  "mappings": {
    "properties": {
      "age":    { "type": "integer" },  
      "email":  { "type": "keyword"  }, 
      "name":   { "type": "text"  }     
    }
  }
}

在已存在的映射中添加字段

PUT /my-index-000001/_mapping
{
  "properties": {
    "employee-id": {
      "type": "keyword",
      "index": false
    }
  }
}

数据迁移

官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/docs-reindex.html

POST _reindex
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

分词器

标准分词器

https://www.elastic.co/guide/en/elasticsearch/reference/7.x/analysis-standard-analyzer.html

POST _analyze
{
  "analyzer": "standard",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

ik分词器

https://github.com/medcl/elasticsearch-analysis-ik

自定义词库

(1)修改/mydata/elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml

vim /mydata/elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml

(2)将注释打开,并写入需要的url

<entry key="remote_ext_dict">远程扩展字段url</entry>

(3)重启es即可

Copyright © 2002-2019 某某自媒体运营 版权所有