Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。
Elasticsearch使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的
RESTful API
来隐藏Lucene的复杂性,从而让全文搜索变得简单。
es主要优点是:实现了分布式的实时文件存储和和分析搜索引擎,其中的每个字段都可以被索引搜索,并且易于扩容。
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields
对标我们的工程中,每条上报的数据就是一个文档,他们的类型就是doc类型,每条记录都会有自己的id。
es支持用api上传一条记录,PUT /{_index}/{_type}/{_id} ,路径中也可以不指定_id,使用es自动生成的自增id
(22个字符长的UUID))。
其他常用的检索:
GET /{_index}/{_type}/_search, 用_search取代_id时会返回所有记录。
GET /{_index}/{_id}/_search?q=last_name:Smith, q指定检索条件,这种是带参数查询,另外还可以用DSL语句查询,例如以下查询语句与上面的带参查询等效:
GET /{_index}/{_id}/_search
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}
GET /{_index}/{_id}/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests" }
}
}
}
es中的聚合也允许分级汇总,例如计算出各类interests的平均年龄:
GET /{_index}/{_id}/_search
{
"aggs" : {
"all_interests" : {
"terms" : { "field" : "interests" },
"aggs" : {
"avg_age" : {
"avg" : { "field" : "age" }
}
}
}
}
}
es中的数据可以分为两大类:确切值和全文文本,确切值只能精确匹配,全文文本可以进行分词模糊匹配。
各个字段及其类型信息保存在mapping中,可以在创建索引的时候指定映射,也可以稍后再新增映射,但是重要的是已经存在的字段,其类型不允许再修改。
全文搜索和短语搜索:搜索栏直接输入hello world,会过滤出包含hello和world的所有文档,但是当输入“hello world”会过滤出包含该短语的文档。
字段搜索:field:value 为限定字段的全文搜索,field:"value"为限定字段的精确搜索;_exists_:field 文档中存在该字段,_missing_:field 文档中不存在该字段;
通配符:?匹配单个字符,*匹配0或多个字符,但是?和*不能作为第一个字符
范围搜索:[a TO b] {a TO b}, []包含端点,{}不包含端点
逻辑搜索:AND 与,OR 或,+ 搜索结果必须包含此项,- 搜索结果必须不能包含此项;例如:+name:张* -age:20, 过滤出姓张且不为20岁的同学;
分组搜索: (name: 张* OR city:深圳) AND age:20, 过滤出所有姓张和在深圳的20岁的同学
字段分组: field:()
转义字符: + - && || ! () {} [] ^" ~ * ? : \ 以上字符需要用 \ 转义
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有