Elasticsearch初体验
来源:互联网 发布:孔莹网络春晚 编辑:程序博客网 时间:2024/05/16 09:49
Elasticsearch是一个分布式的RESTful风格的搜索和数据分析引擎。个人理解的Elasticsearch和传统的关系型数据库的最大区别在于,它可以进行结构化搜索,全文检索以及对数据进行分析。这篇文章简单地介绍一下如何在linux环境下通过curl命令完成Elasticsearch RESTful API功能。
一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的部件组成:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
介绍一下被 < > 标记的部件:
VERB
适当的 HTTP 方法 或 谓词 : GET、
POST、
PUT、
HEAD 或者 DELETE
。
PROTOCOL
http 或者 https(如果你在 Elasticsearch 前面有一个
https 代理)
HOST
Elasticsearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。
PORT
运行 Elasticsearch HTTP 服务的端口号,默认是 9200 。
PATH
API 的终端路径(例如 _count 将返回集群中文档数量)。Path 可能包含多个组件,例如:_cluster/stats 和 _nodes/stats/jvm 。
QUERY_STRING
任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值,使其更容易阅读)
BODY
一个 JSON 格式的请求体 (如果请求需要的话)
下面仅以查询功能为例,例如可以通过如下命令获取集群中文档的数量:
curl -XGET 'http://localhost:9200/_count?pretty' -d '{ "query": { "match_all": {} }}'
注意根据你的情况修改ip地址和端口号,正常情况会返回一个类似与下面的json对象:
{ "count" : 17, "_shards" : { "total" : 1, "successful" : 1, "failed" : 0 }}
现在,在我的本地,我可以根据下面的命令获取到一些信息:
curl -XGET 'http://localhost:9200/method_invocation_b/default/AV4tSzEKxwX4VBM9JTI-?pretty'
返回如下:
在命令中,method_invocation_b是一个索引。索引这个词在 Elasticsearch 语境中包含多重意思, 所以有必要做一点儿说明:(下面这段话引自Elasticsearch官方文档)
索引(名词):
如前所述,一个索引类似于传统关系数据库中的一个数据库 ,是一个存储关系型文档的地方。 索引 (index) 的复数词为 indices或 indexes 。
索引(动词):
索引一个文档 就是存储一个文档到一个 索引 (名词)中以便它可以被检索和查询到。这非常类似于 SQL 语句中的 INSERT关键词,除了文档已存在时新文档会替换旧文档情况之外。
倒排索引:
关系型数据库通过增加一个 索引 比如一个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的。
默认的,一个文档中的每一个属性都是 被索引 的(有一个倒排索引)和可搜索的。一个没有倒排索引的属性是不能被搜索到的。我们将在 倒排索引 讨论倒排索引的更多细节。
命令中的索引明显指的是名词索引,可以理解为这个值定位到一个我本地的数据库method_invocation_b,再之后的default是类型名称,这里是默认类型,随后的AV4tSzEKxwX4VBM9JTI-是记录的id。返回结果中的_source域是这次查询结果的具体信息(仅是我在本地存储的一些数据)。
下面尝试用另外一种方式搜索索引method_invocation_b下default类型的全部数据,命令如下:
curl -XGET 'http://localhost:9200/method_invocation_b/default/_search?pretty'
返回如下:
可以看到,我们仍然指定了索引method_invocation_b和类型default,但是没有指定一个id,而是使用了_search。从返回结果可以看到有1756180条符合查询条件的记录,但是一次搜索默认只返回10条结果。
接下来,我们尝试搜索methodDictId为32093的数据,这个方法一般涉及到一个查询字符串 (query-string)搜索,因为我们通过一个URL参数来传递查询信息给搜索接口,命令如下:
curl -XGET 'http://localhost:9200/method_invocation_b/default/_search?q=methodDictId:32093&pretty'
返回如下:
使用查询字符串搜索很方便,但是它有自身的局限性,Elasticsearch还提供一个丰富灵活的查询语言叫做 查询表达式,它支持构建更加复杂和健壮的查询。它指定使用一个json对象封装查询的条件,例如,我们也可以通过如下的命令达到上述的搜索结果:
curl -XGET 'http://localhost:9200/method_invocation_b/default/_search?pretty' -d '{ "query": { "bool": { "must": { "match": { "methodDictId": { "query": 33396, "type": "phrase" } } } } }}'
返回结果同之前一样:
(这里提供一个链接,可以将sql语句转换为json字符串:http://www.nlpcn.org:9999/web/)
命令中使用了match查询,这是查询类型的一种,还有其他的查询类型会在后面继续介绍。
- Elasticsearch初体验
- elasticsearch rest API初体验
- Elasticsearch初体验(一)
- Elasticsearch-Spark 体验
- Elasticsearch 5.6.1版本体验
- ElasticSearch初体验之使用Java进行最基本的增删改查
- Java爬虫初体验:简单抓取IT之家热评(整合Spring Boot+Elasticsearch+Redis+Mybatis)
- Elasticsearch 学习笔记 (二) 之 上手体验
- 初体验
- 初体验
- 初体验
- 初体验
- 初体验
- 初体验
- 初体验
- elasticsearch初入门
- ElasticSearch
- Elasticsearch
- java 空指针异常解决办法
- 文章标题
- Linux下安装svn
- javaEE中的spring配置笔记
- The method xxx() of type xx must override or implement a supertype method
- Elasticsearch初体验
- 反转单链表
- 【真题 腾讯】满二叉搜索树求三个节点的最低公共祖先
- android创建自定义控件步骤
- 搭建elsticsearch集群 报错with the same id but is a different node instance解决办法
- bootstrap-treeview 中文api
- 多线程学习之路-学习master-worker设计模式
- React-Native实现登录页面,并显示和清除用户的输入
- oracle中的函数介绍(一):nvl函数、decode函数、case when函数、sum函数