全文搜索引擎Elasticsearch的初体验:基本概念和操作
一、简介
关于Java Web的开发周边技术,搜索引擎也是经常被用到的,其中solr和es是被当作技术选型经常出现的,他们都是基于lucene,但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。而今天所讲的es,它是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。
一、简介
关于Java Web的开发周边技术,搜索引擎也是经常被用到的,其中solr和es是被当作技术选型经常出现的,他们都是基于lucene,但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。而今天所讲的es,它是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。
解压刚才下载的压缩包,然后进入bin目录,可以看到一些es的相关命令:
使用bin目录中的elasticsearch命令启动:
它会启动在9200端口,这是我们可以访问一下http://127.0.0.1:9200/:
看它的tagline:ou Know, for Search。证明启动成功了,可以开始我们的搜索了。
三:概念
在使用es之前,先来了解一些它的基本概念:
1、Node:单个 Elastic 实例称为一个节点(node)
2、Cluster:一组节点构成一个集群(cluster),Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。
3、Index:Elastic 数据管理的顶层单位就叫做 Index(索引),Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。
4、Document:Index 里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。
5、Type:Document 可以分组,这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。
四:中文分词
在搜索引擎中,还有一个重要的设置,那就是中文分词的设置,毕竟国内开发不得不安装这个插件,就像编码处理一样,刚才在bin目录中大家也看到一个命令:elasticsearch-plugin,我们可以利用它来安装中文分词神器-ik中文分词器,安装命令如下:
/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.5.1/elasticsearch-analysis-ik-5.5.1.zip
接着,重新启动 Elastic,就会自动加载这个新安装的插件。
五:数据的操作
1、新建Index,指定需要分词的字段:
命令
curl -X PUT 'localhost:9200/cities' -d '
{"mappings": {"city": {"properties": {"name": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_max_word"},"desc": {"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_max_word"}}}}
}'
上述操作新建一个名称为cities的 Index,里面有一个名称为city的 Type。person有两个属性:name和desc。analyzer是字段文本的分词器,search_analyzer是搜索词的分词器。ik_max_word分词器是插件ik提供的,可以对文本进行最大数量的分词。{"acknowledged":true,"shards_acknowledged":true}是服务器返回的JSON值,acknowledged=true表示操作成功。
2、新增记录
向指定的 /Index/Type 发送 PUT 请求,就可以在 Index 里面新增一条记录。
命令
curl -X PUT 'localhost:9200/cities/city/1' -d '
{"name": "北京","desc": "帝都,北漂的人想出去,外边的人想北漂。"
}'
如图所示,服务器返回的 JSON 对象,会给出 Index、Type、Id、Version 等信息。
在请求的路径中,最后的1是该条记录的 Id,它不一定是数字,任意字符串都可以。新增记录的时候,也可以不指定 Id,这时要改成 POST 请求。
命令:
curl -X POST 'localhost:9200/cities/city' -d '
{"name": "上海","desc": "上海滩,多少人想成为许文强一样的人物"
}'
3、查看记录
向/Index/Type/Id发出 GET 请求,就可以查看这条记录。
命令
curl 'localhost:9200/cities/city/1?pretty=true'
4、删除记录
删除记录就是发出 DELETE 请求。
命令
curl -X DELETE 'localhost:9200/cities/city/1'
5、更新记录
更新记录就是使用 PUT 请求,重新发送一次数据。
命令:
curl -X PUT 'localhost:9200/cities/city/AXKyTASFQrU13vhMO-rj' -d '
{"name": "上海","desc": "上海滩,多少人想成为许文强一样的人物,还需要丁力一样的帮手"
}'
6、返回所有记录
使用 GET 方法,直接请求/Index/Type/_search,就会返回所有记录。我们把刚才删除的北京添加进来,再查询:
命令
curl 'localhost:9200/cities/city/_search'
7、全文搜索
Elastic 有自己的查询语法,要求 GET 请求带有数据体。
命令:
curl 'localhost:9200/cities/city/_search' -d '
{"query" : { "match" : { "desc" : "北漂" }}
}'
上面是查询语法,下面是查询结果。
8、逻辑运算
如果有多个搜索关键字, Elastic 认为它们是or关系。
命令:
curl 'localhost:9200/cities/city/_search' -d '
{"query" : { "match" : { "desc" : "北漂 许文强" }}
}'
如果要执行多个关键词的and搜索,必须使用布尔查询。
命令:
curl 'localhost:9200/cities/city/_search' -d '
{"query": {"bool": {"must": [{ "match": { "desc": "北漂" } },{ "match": { "desc": "许文强" } }]}}
}'
没有结果返回。
elasticsearch在日常开发中用途很多,感兴趣可以动手试一试,了解一下它都有什么功能。
全文搜索引擎Elasticsearch的初体验:基本概念和操作相关推荐
- 全文搜索引擎 Elasticsearch 入门概念
基本概念 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点(nod ...
- 全文搜索引擎----ElasticSearch和Solr
全文搜索引擎 ElasticSearch 还是 Solr? 最近项目组安排了一个任务,项目中用到了全文搜索,基于全文搜索 Solr,但是该 Solr 搜索云项目不稳定,经常查询不出来数据,需要手动全量 ...
- 全文搜索引擎Elasticsearch,这篇文章给讲透了!(Elasticsearch技术原理及实现方式)
关于Elasticsearch的技术原理及实现方式看了两篇讲的非常好的文章,在这里分享给大家. 其中一篇是: Elasticsearch 技术分析(九):全文搜索引擎Elasticsearch,这篇文 ...
- 全文搜索引擎Elasticsearch,这篇文章给讲透了
之前已经分享过Elasticsearch的使用和原理的知识,由于近期在公司内部做了一次分享,所以本篇主要是基于之前的博文的一个总结,希望通过这篇文章能让读者大致了解Elasticsearch是做什么的 ...
- 全文搜索引擎 Elasticsearch 简介 及其与 Python 的对接实现
什么是 Elasticsearch 想查数据就免不了搜索,搜索就离不开搜索引擎,百度.谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索引了互联网上开放的所有网页和数据.然而对于我们自己的业务数据来说,肯 ...
- 2万字详解,彻底讲透 全文搜索引擎 Elasticsearch
来源:cnblogs.com/jajian/p/11223992.html 由于近期在公司内部做了一次 Elasticsearch 的分享,所以本篇主要是做一个总结,希望通过这篇文章能让读者大致了解 ...
- 全文搜索引擎 Elasticsearch 入门(ik,kibana,x-pack)
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选. 它可以快速地储存.搜索和分析海量 ...
- 全文搜索引擎ElasticSearch
什么是ElasticSearch? Elasticsearch和Redis, Mysql一样,不仅服务于Java语言,其它语言也可以使用, 它的功能也类似一个数据库,能高效的从大量数据中搜索匹配指定关 ...
- 全文搜索引擎Elasticsearch,这篇文章给讲透了!
于elasticsearch的深度好文. 生活中的数据 搜索引擎是对数据的检索,所以我们先从生活中的数据说起.我们生活中的数据总体分为两种: 结构化数据 非结构化数据 结构化数据:也称作行数据,是由二 ...
最新文章
- 如何用chrome查看post get及返回的数据
- 高并发下防止库存超卖解决方案
- Angular开发准备
- python下载谷歌地图瓦片_python获取bing地图发布自己的TMS服务(一)下载瓦片
- @程序员,你的技术过气了吗?
- java基本数据类型泛型_Java中的泛型
- 为什么使用close()关闭所打开文件
- Linux内核对per-cpu变量的实现
- HOOK NtCreateSection
- 接口性能测试方案分析
- SQLServer用COMPUTE 和 COMPUTE BY 汇总数据
- 微信小程序如何搭建自己的后台(超详细,超完整)(上线必备)!!!
- Win10笔记本电脑设置插入鼠标时自动禁用触摸板
- hihocoder 1257 Snake Carpet
- 为civil3D2018 添加snoop DB工具
- 情绪识别(python opencv dlib)
- ESXi服务器遇到 IPMI_SI_DRV 的解决, 感谢原作者 以及今天 解决问题.
- fly.io ruby on rails
- 微信公众平台接口程序语音天气
- 灵魂筹码一直显示连接服务器,灵魂筹码进不去怎么办_灵魂筹码进入显示错误解决方法_3DM单机...