Elasticsearch学习笔记——安装、数据导入和查询
到elasticsearch网站下载最新版本的elasticsearch 6.2.1
1
|
https: //www .elastic.co /downloads/elasticsearch |
中文文档请参考
1
|
https: //www .elastic.co /guide/cn/elasticsearch/guide/current/index .html |
英文文档及其Java API使用方法请参考,官方文档比任何博客都可信
1
|
https: //www .elastic.co /guide/en/elasticsearch/client/java-api/current/index .html |
Python API使用方法
1
|
http: //elasticsearch-py .readthedocs.io /en/master/ |
下载tar包,然后解压到/usr/local目录下,修改一下用户和组之后可以使用非root用户启动,启动命令
1
|
. /bin/elasticsearch |
然后访问http://127.0.0.1:9200/
如果需要让外网访问Elasticsearch的9200端口的话,需要将es的host绑定到外网
修改 /configs/elasticsearch.yml文件,添加如下
1
2
|
network.host: 0.0.0.0 http.port: 9200 |
然后重启,如果遇到下面问题的话
1
2
3
4
|
[2018-01-28T23:51:35,204][INFO ][o.e.b.BootstrapChecks ] [qR5cyzh] bound or publishing to a non-loopback address, enforcing bootstrap checks ERROR: [2] bootstrap checks failed [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] |
解决方法
在root用户下执行
1
|
sysctl -w vm.max_map_count=262144 |
接下来导入json格式的数据,数据内容如下
1
2
3
4
|
{ "index" :{ "_id" : "1" }} { "title" : "许宝江" , "url" : "7254863" , "chineseName" : "许宝江" , "sex" : "男" , "occupation" : " 滦县农业局局长" , "nationality" : "中国" } { "index" :{ "_id" : "2" }} { "title" : "鲍志成" , "url" : "2074015" , "chineseName" : "鲍志成" , "occupation" : "医师" , "nationality" : "中国" , "birthDate" : "1901年" , "deathDate" : "1973年" , "graduatedFrom" : "香港大学" } |
需要注意的是{"index":{"_id":"1"}}和文件末尾另起一行换行是不可少的
其中的id可以从0开始,甚至是abc等等
否则会出现400状态,错误提示分别为
1
|
Malformed action /metadata line [1], expected START_OBJECT or END_OBJECT but found [VALUE_STRING] |
1
|
The bulk request must be terminated by a newline [\n]" |
使用下面命令来导入json文件
其中的people.json为文件的路径,可以是/home/common/下载/xxx.json
其中的es是index,people是type,在elasticsearch中的index和type可以理解成关系数据库中的database和table,两者都是必不可少的
1
|
curl -H "Content-Type: application/json" -XPOST 'localhost:9200/es/people/_bulk?pretty&refresh' --data-binary "@people.json" |
成功后的返回值是200,比如
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
{ "took" : 233, "errors" : false , "items" : [ { "index" : { "_index" : "es" , "_type" : "people" , "_id" : "1" , "_version" : 1, "result" : "created" , "forced_refresh" : true , "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1, "status" : 201 } }, { "index" : { "_index" : "es" , "_type" : "people" , "_id" : "2" , "_version" : 1, "result" : "created" , "forced_refresh" : true , "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1, "status" : 201 } } ] } |
<0>查看字段的mapping
1
|
http: //localhost :9200 /es/people/_mapping |
接下来可以使用对应的查询语句对数据进行查询
<1>按id来查询
1
|
http: //localhost :9200 /es/people/1 |
<2>简单的匹配查询,查询某个字段中包含某个关键字的数据(GET)
1
|
http: //localhost :9200 /es/people/_search ?q=_id:1 |
1
|
http: //localhost :9200 /es/people/_search ?q=title:许 |
<3>多字段查询,在多个字段中查询包含某个关键字的数据(POST)
可以使用Firefox中的RESTer插件来构造一个POST请求,在升级到Firefox quantum之后,原来使用的Poster插件挂了
在title和sex字段中查询包含 许 字的数据
1
2
3
4
5
6
7
8
|
{ "query" : { "multi_match" : { "query" : "许" , "fields" : [ "title" , "sex" ] } } } |
还可以额外指定返回值
size指定返回的数量
from指定返回的id起始值
_source指定返回的字段
highlight指定语法高亮
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
{ "query" : { "multi_match" : { "query" : "中国" , "fields" : [ "nationality" , "sex" ] } }, "size" : 2, "from" : 0, "_source" : [ "title" , "sex" , "nationality" ], "highlight" : { "fields" : { "title" : {} } } } |
<4>Boosting
用于提升字段的权重,可以将max_score的分数乘以一个系数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
{ "query" : { "multi_match" : { "query" : "中国" , "fields" : [ "nationality^3" , "sex" ] } }, "size" : 2, "from" : 0, "_source" : [ "title" , "sex" , "nationality" ], "highlight" : { "fields" : { "title" : {} } } } |
<5>组合查询,可以实现一些比较复杂的查询
AND -> must
NOT -> must not
OR -> should
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
{ "query" : { "bool" : { "must" : { "bool" : { "should" : [ { "match" : { "title" : "鲍" }}, { "match" : { "title" : "许" }} ], "must" : { "match" : { "nationality" : "中国" }} } }, "must_not" : { "match" : { "sex" : "女" }} } } } |
<6>模糊(Fuzzy)查询(POST)
1
2
3
4
5
6
7
8
9
10
11
|
{ "query" : { "multi_match" : { "query" : "厂长" , "fields" : [ "title" , "sex" , "occupation" ], "fuzziness" : "AUTO" } }, "_source" : [ "title" , "sex" , "occupation" ], "size" : 1 } |
通过模糊匹配将 厂长 和 局长 匹配上
AUTO的时候,当query的长度大于5的时候,模糊值指定为2
<7>通配符(Wildcard)查询(POST)
?
匹配任何字符
*
匹配零个或多个字
1
2
3
4
5
6
7
8
9
|
{ "query" : { "wildcard" : { "title" : "*宝" } }, "_source" : [ "title" , "sex" , "occupation" ], "size" : 1 } |
<8>正则(Regexp)查询(POST)
1
2
3
4
5
6
7
8
9
|
{ "query" : { "regexp" : { "authors" : "t[a-z]*y" } }, "_source" : [ "title" , "sex" , "occupation" ], "size" : 3 } |
<9>短语匹配(Match Phrase)查询(POST)
短语匹配查询 要求在请求字符串中的所有查询项必须都在文档中存在,文中顺序也得和请求字符串一致,且彼此相连。
默认情况下,查询项之间必须紧密相连,但可以设置 slop
值来指定查询项之间可以分隔多远的距离,结果仍将被当作一次成功的匹配。
1
2
3
4
5
6
7
8
9
10
11
|
{ "query" : { "multi_match" : { "query" : "许长江" , "fields" : [ "title" , "sex" , "occupation" ], "type" : "phrase" } }, "_source" : [ "title" , "sex" , "occupation" ], "size" : 3 } |
注意使用slop的时候距离是累加的,滦农局 和 滦县农业局 差了2个距离
1
2
3
4
5
6
7
8
9
10
11
12
|
{ "query" : { "multi_match" : { "query" : "滦农局" , "fields" : [ "title" , "sex" , "occupation" ], "type" : "phrase" , "slop" :2 } }, "_source" : [ "title" , "sex" , "occupation" ], "size" : 3 } |
<10>短语前缀(Match Phrase Prefix)查询(POST)
Elasticsearch学习笔记——安装、数据导入和查询的更多相关文章
- ArcGIS案例学习笔记_3_2_CAD数据导入建库
ArcGIS案例学习笔记_3_2_CAD数据导入建库 计划时间:第3天下午 内容:CAD数据导入,建库和管理 目的:生成地块多边形,连接属性,管理 问题:CAD存在拓扑错误,标注位置偏移 教程:pdf ...
- Elasticsearch+Mongo亿级别数据导入及查询实践
数据方案: 在Elasticsearch中通过code及time字段查询对应doc的mongo_id字段获得mongodb中的主键_id 通过获得id再进入mongodb进行查询 1,数据情况: ...
- clickhouse安装数据导入及查询测试
官网 https://clickhouse.tech/ quick start ubantu wget https://repo.yandex.ru/clickhouse/deb/lts/main/c ...
- elasticsearch学习笔记——安装,初步使用
前言 久仰elasticsearch大名,近年来,fackbook,baidu等大型网站的搜索功能均开始采用elasticsearch,足见其在处理大数据和高并发搜索中的卓越性能.不少其他网站也开始将 ...
- Elasticsearch学习笔记(十)批量查询mget、批量增删改bulk
一.批量查询 mget GET /_mget { "docs":[ { "_index":" ...
- ElasticSearch学习笔记--安装
1.安装ElasticSearch https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html 这 ...
- GIS案例学习笔记-CAD数据分层导入现有模板实例教程
GIS案例学习笔记-CAD数据分层导入现有模板实例教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 1. 原始数据: CAD数据 目标模板 2. 任务:分5个图层 ...
- Elasticsearch学习笔记一
Elasticsearch Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎.它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索 ...
- elasticsearch学习笔记——相关插件和使用场景
logstash-input-jdbc学习 ES(elasticsearch缩写)的一大优点就是开源,插件众多.所以扩展起来非常的方便,这也造成了它的生态系统越来越强大.这种开源分享的思想真是与天朝格 ...
随机推荐
- 【XSY1476】平凡之路 斜率优化DP
题目大意 有\(n\)个格子,一开始你在\(1\)号格子.每次你只能往编号更大的格子走.从第\(i\)个格子走到第\(j\)个格子的代价是\(a_i+a_j\times(j-i)\times m\) ...
- 【BZOJ3771】Triple 生成函数 FFT 容斥原理
题目大意 有\(n\)把斧头,不同斧头的价值都不同且都是\([0,m]\)的整数.你可以选\(1\)~\(3\)把斧头,总价值为这三把斧头的价值之和.请你对于每种可能的总价值,求出有多少种选择方案. ...
- dns配置文件
/etc/resolv.conf 该文件是DNS域名解析的配置文件,它的格式很简单,每行以一个关键字开头,后接配置参数. resolv.conf的关键字主要有四个,分别是: nameserver ...
- Ubuntu 18.04 安装微信(Linux通用)
Linux相关的知识:https://www.cnblogs.com/dunitian/p/4822808.html#linux 新增谷歌浏览器添加到桌面的彻底删除:https://www.cnblo ...
- CF528D Fuzzy Search
题意:给定k,只含有ACGT的字符串S和T,求T在S中出现了多少次. 字符匹配:如果S的[i - k, i + k]中有字符x,那么第i位可以匹配x. 解: 首先预处理:f[i][j]表示S的第i位能 ...
- numpy学习之前的必要数学知识:线性代数
行列式 主要内容 1.行列式的定义及性质 2.行列式的展开公式 一.行列式的定义 1.排列和逆序 排列:由n个数1,2,…,n组成的一个有序数组称为一个n级排列,n级排列共有n!个 逆序:在一个排列中 ...
- python常用的内置模块
1.import time time模块与时间相关的功能 在python中时间分为3种 1.时间戳timestamp从1970 1月 1日到现在的秒数 主要用于计算两个时间的差 2.localtime ...
- 项目管理干货——项目管理入门级书籍(附赠5G项目管理书籍电子版)
各位项目经理我们都是在不断的学习和自我学习中不断成长的,所以我们需要多看书,才能做好一个项目经理,但是很多人,在挑选书籍的时候犯了难,今天我就把自己学习的时候看的那些书单整理出来,大家有需要的可以留言 ...
- 初识JSP知识
一.jsp概述 JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP实际上就是Servlet. jsp = html ...
- request 对于cookie,session, json的处理
一.cookie是存放在客户端,session是存放在服务端. 因为http是无状态的,当客户端发送请求给服务端的时候,服务端为了区分下一次发送请求的是不是同一个客户,那么就需要用一种方式记录下这个客 ...