最近在学习Elasticsearch,结合网上的视频和文档,对学到的东西做一些整理搬运,方便自己学习,也方便对此感兴趣的朋友。如有错误烦请指正。学习此篇之前,需要先安装Elasticsearch服务,为了更好的可视化体验,也可以安装Kibana(Kibana 是一种数据可视化和挖掘工具,可以用于日志和时间序列分析、应用程序监控和运营智能使用案例)结合使用。
此篇文章使用的是Elasticsearch8.1.1, Elasticsearch-analysis-ik8.1.1, Kibana8.1.1,安装好Kibana并连接Elasticsearch服务之后的界面如图:
deal_doc.png
简单的索引及映射操作
# 创建索引
PUT person
# 查询索引
GET person
# 删除索引
DELETE person
# 查询映射
GET person/_mapping
# 添加映射
PUT person/_mapping
{
"properties": {
"name":{
"type":"keyword"
},
"age":{
"type": "integer"
}
}
}
# 创建索引并添加映射
PUT person
{
"mappings": {
"properties": {
"name": {
"type": "keyword"
},
"age": {
"type": "integer"
}
}
}
}
# 添加字段
PUT person/_mapping
{
"properties": {
"address": {
"type": "text"
}
}
}
简单的文档的操作
# 添加文档,指定id
PUT person/_doc/1
{
"name":"zhangsan",
"age": 20,
"address": "中国广东大湾区"
}
# 添加文档,不指定id
POST person/_doc
{
"name":"lisi",
"age": 21,
"address": "中国香港铜锣湾"
}
# 查询文档
GET person/_doc/Fhzy_H8BX7CMmb5VcgST
# 查询所有文档
GET person/_search
# 修改文档
PUT person/_doc/1
{
"name":"zhangsan",
"age": 20,
"address": "中国广东广州番禺区"
}
# 根据id删除文档
DELETE person/_doc/Fhzy_H8BX7CMmb5VcgST
简单的分词操作
analysis.png原生的分词器对中文的分词支持不友好,一个字为一个词,所以还需要安装ik分词器插件,安装之后,可以按照粗细粒度分词
analysis1.png analysis2.png
简单的词条查询
# term词条查询。查询的条件字符串和词条完全匹配
# es 默认使用的分词器是standard,中文字符一个字一个词
GET person/_search
{
"query": {
"term": {
"address": {
"value": "杭州"
}
}
}
}
# match 先对查询的字符串进行分词,再查询,求并集
GET person/_search
{
"query": {
"match": {
"address": "上海市嘉定区"
}
}
}
批量操作
# 批量操作
POST _bulk
{"delete":{"_index":"person", "_id": "3"}}
{"create":{"_index":"person", "_id": "3"}}
{"name":"美少女战士", "age":18, "address":"银河系水冰月"}
{"update":{"_index":"person", "_id": "2"}}
{"doc":{"name":"lisibaba"}}
python代码的简单操作
from elasticsearch import Elasticsearch
# elasticsearch集群服务器地址
ES = [
'http://192.168.16.130:9200'
]
# 创建elasticsearch客户端
es = Elasticsearch(
ES,
# 启动前嗅探es集群服务器
sniff_on_start=True,
# es集群服务器节点连接异常时是否刷新es节点信息
sniff_on_node_failure=True,
# 每60秒刷新节点信息
sniff_timeout=60
)
# get document api
print(es.get(index="person", id="1"))
# get index api
print(es.indices.get(index="person"))
# search
query = {
"match": {
"address": {"query": "中国", "analyzer": "ik_max_word"}
}
}
print(es.search(index='person',
# 分页
from_=1,
# 每页条数
size=1,
query=query
))
elasticsearch-py的语法截至当前版本与之前的版本有些许变化,需要阅读相关文档,其他更多、更高级的用法可以查看elasticsearch-py库
网友评论