Elasticsearch 入门,基本概念和操作

基本概念

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

 

posted @ 2019-06-11 16:44  鸽子飞扬  阅读(1220)  评论(0编辑  收藏  举报