ElasticSearch的基本概念
Elaticsearch,简称为ES, ES是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。ES也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
下载压缩包
ElasticSearch的官方地址: https://www.elastic.co/products/elasticsearch
安装和启动
Window版的ElasticSearch的安装很简单,类似于Tomcat,解压开即安装完毕,解压后的ElasticSearch的目录结构如下:
进入bin目录,运行elasticsearch.bat文件即可
启动成功后,访问http://localhost:9200, 显示类似入下信息:
补充: 9300是tcp通讯端口,9200是http协议的RESTful接口 。
使用ES图形化管理界面Head
准备:
1. 需要安装Node.js
2. 安装grunt (npm install -g grunt-cli)
安装
head插件下载地址:https://github.com/mobz/elasticsearch-head
将文件存如本地文件夹,例如如:C:\es\elasticsearch-head-master文件,文件目录如下
启动命令行,进入C:\es\elasticsearch-head-master目录,运行
1. npm install
2. grunt server
启动成功,访问:http://localhost:9100,显示如下
需要配置ES跨域才能连接
配置ES运行跨域
进入ES安装目录,进入config文件夹,编辑elasticsearch.yml文件。在文件夹底部加入:
http.cors.enabled: true
http.cors.allow-origin: "*"
重启服务后,刷新页面,显示如下
使用POST操作ES
1. 创建Index和mapping
url: http://localhost:9200/news(news是index名称,自定义即可)
method: PUT
请求体如下:(选择raw 类型为json)
{
"mappings": {
"article": {
"properties": {
"id": {
"type": "long",
"store": true,
"index":"not_analyzed"
},
"title": {
"type": "text",
"store": true,
"index":"analyzed",
"analyzer":"standard"
},
"content": {
"type": "text",
"store": true,
"index":"analyzed",
"analyzer":"standard"
}
}
}
}
}
artcile为type名,自定义即可。properties下的属性名也是根据需要自定义即可。 orient/strip%7CimageView2/2/w/1240)
2. 删除Index
url: localhost:9200/news
method:DELETE
也可以通过Head直接删除,点击动作按钮下的删除选项,在输入框里输入删除即可
添加Document
url: http://localhost:9200/news/article/1
method: POST
请求体:
{
"id":1,
"title": "经济学讲义",
"content": "你能不能在生活中找一个例子,看上去是个公正的规则,但它背后其实是有效率的考量的?"
}
查看结果:
注意:url中 http://localhost:9200/news/article/1 的1(_id)可以省略,会自动生成字符串的_id
修改Document
修改的请求和添加的请求是一样,只需要找到要修改的文档的_id
url: http://localhost:9200/news/article/1
method: POST
请求体:
{
"id":1,
"title": "【修改后的】经济学讲义",
"content": "你能不能在生活中找一个例子,看上去是个公正的规则,但它背后其实是有效率的考量的?"
}
查看结果:
删除Document
url: http://localhost:9200/news/article/1
method: DELETE
根据_id查询
url: http://localhost:9200/blog/article/4
method: GET
term查询
url: http://localhost:9200/blog/article/_search
method: POST
请求体:
{
"query": {
"term": {
"title": "测"
}
}
}
queryString查询
url: http://localhost:9200/blog/article/_search
method: POST
请求体:
{
"query": {
"query_string": {
"default_field": "title",
"query": "搜索服务器"
}
}
}
安装IK分词器插件
由于标准分词器对中文的分词是一个字一字的,导致搜索文档里的词组得不到结果,我们需要引入中文分词器IK
查询分析
postman请求,查看分词器分词结果
url:http://localhost:9200/_analyze?analyzer=standard&pretty=true&text=测试数据
查询结果:
{
"tokens": [
{
"token": "测",
"start_offset": 0,
"end_offset": 1,
"type": "",
"position": 0
},
{
"token": "试",
"start_offset": 1,
"end_offset": 2,
"type": "",
"position": 1
},
{
"token": "数",
"start_offset": 2,
"end_offset": 3,
"type": "",
"position": 2
},
{
"token": "据",
"start_offset": 3,
"end_offset": 4,
"type": "",
"position": 3
}
]
}
补充: analyzer为分词算法,text字段为查询的关键词或句子
IK插件简介
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。
IK提供了两个分词算法ik_smart 和 ik_max_word,其中 ik_smart 为最少切分,ik_max_word为最细粒度划分
安装IK插件
IK下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
将下载的包解压,放到ES的安装目录下的plugins文件夹下
然后重启ES
查看用IK分词器的分词结果
url:http://localhost:9200/_analyze?analyzer=ik_max_word&pretty=true&text=祖国真好啊
查询结果:
{
"tokens": [
{
"token": "祖国",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 0
},
{
"token": "真好",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 1
},
{
"token": "好啊",
"start_offset": 3,
"end_offset": 5,
"type": "CN_WORD",
"position": 2
}
]
}
创建用ik_max_word算法的Index
url:http://localhost:9200/blog
method: PUT
请求体:
{
"mappings": {
"article": {
"properties": {
"id": {
"type": "long",
"store": true,
"index":"not_analyzed"
},
"title": {
"type": "text",
"store": true,
"index":"analyzed",
"analyzer":"ik_max_word"
},
"content": {
"type": "text",
"store": true,
"index":"analyzed",
"analyzer":"ik_max_word"
}
}
}
}
}