欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Elasticsearch 入门,基本概念和操作

程序员文章站 2022-07-01 09:27:51
...

基本概念

Node 与 Cluster

Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。

单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。

 

Index ( 对应数据库的表 )

Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。

所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是表的同义词。每个 Index 的名字必须是小写。

下面的命令可以查看当前节点的所有 Index。

curl -X GET 'http://localhost:9200/_cat/indices?v'

 ElasticSearch 默认开启9200、9300端口,9200端口供http访问,9300供tcp访问,ElasticSearch通过9300端口通信,

可以直接通过 http://localhost:9200 访问 ElasticSearch,为简化示例,后续都是通过curl方式演示相关操作

 

Document (对应数据库表的行)

Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。

Document 使用 JSON 格式表示,下面是一个例子。

同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

{
  "user": "张三",
  "title": "工程师",
  "desc": "数据库管理"
}

 

Type(分类,elasticsearch 7.0之后弃用)

Document 可以分组,比如weather这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。

不同的 Type 应该有相似的结构(schema),举例来说,id字段不能在这个组是字符串,在另一个组是数值。这是与关系型数据库的表的一个区别。性质完全不同的数据(比如productslogs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。

下面的命令可以列出每个 Index 所包含的 Type。

 

curl 'localhost:9200/_mapping?pretty=true'

 

Mapping(类似数据库中的表结构)

查看当前所有mapping

curl 'localhost:9200/_mapping?pretty=true'

 

 

 

基本操作

查看当前节点的所有Index

curl -X GET 'http://localhost:9200/_cat/indices?v'

 

列出每个 Index 所包含的 Type

curl 'localhost:9200/_mapping?pretty=true'

 

新建Index,下面命令,首先新建一个名称为news的 Index,里面有一个名称为newscontent的 Type。news有一个字段 content 。content字段都是中文,而且类型都是文本(text),所以需要指定中文分词器,不能使用默认的英文分词器。

创建index同时创建mapping

curl -X PUT http://localhost:9200/news -H 'Content-Type:application/json' -d'
{
"mappings": {
"newscontent": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}
}
}'

  

删除Index

curl -X DELETE 'localhost:9200/news'

 

新增数据

curl -XPOST http://localhost:9200/news/newscontent/1 -H 'Content-Type:application/json' -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'
 
curl -XPOST http://localhost:9200/news/newscontent/2 -H 'Content-Type:application/json' -d'
{"content":"*部:各地校车将享最高路权"}
'
 
curl -XPOST http://localhost:9200/news/newscontent/3 -H 'Content-Type:application/json' -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
'
 
curl -XPOST http://localhost:9200/news/newscontent/4 -H 'Content-Type:application/json' -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'

  

查看某ID的数据

curl 'localhost:9200/news/newscontent/1?pretty=true'

 

返回所有记录

curl -XPOST http://localhost:9200/news/_search

 

返回搜索记录,并高亮显示 hightlight

curl -XPOST http://localhost:9200/news/_search  -H 'Content-Type:application/json' -d'
{
    "query" : { "match" : { "content" : "中国" }},
    "highlight" : {
        "pre_tags" : ["<red>"],
        "post_tags" : ["</red>"],
        "fields" : {
            "content" : {}
        }
    }
}
'

 

返回结果示例
{
    "took": 14,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 2,
        "hits": [
            {
                "_index": "news",
                "_type": "newscontent",
                "_id": "4",
                "_score": 2,
                "_source": {
                    "content": "中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
                },
                "highlight": {
                    "content": [
                        "<red>中国</red>驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首 "
                    ]
                }
            },
            {
                "_index": "news",
                "_type": "newscontent",
                "_id": "3",
                "_score": 2,
                "_source": {
                    "content": "中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"
                },
                "highlight": {
                    "content": [
                        "均每天扣1艘<red>中国</red>渔船 "
                    ]
                }
            }
        ]
    }
}

  

 

 

参考资料

全文搜索引擎 Elasticsearch 入门教程

作者: 阮一峰

http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html

 

中文分词 elasticsearch-analysis-ik

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

 

CentOS7安装Elasticsearch

腾讯云实验室

https://www.cnblogs.com/gezifeiyang/p/11007727.html

 

Elasticsearch: 权威指南(官方文档) 

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