是Apache软件基金会4 jakarta项目的子项目。它是一个开源的全文检索引擎工具包。但它并不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)
相当于一个库, 还有很多东西要自己写.
权威指南: https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
es中文社区: https://elasticsearch.cn/
Elasticsearch 是一个基于Lucene 搜索引擎为核心构建的开源,分布式,RESTful搜索服务器。它是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。 具体体现在全文检索、结构化搜索、分析以及这三个功能的组合。
准实时
对比关系型数据库(不完全正确,方便理解参考)
数据库 --- 索引indices
表 ---- 类型types
行 ---- 文档documents
字段 ---- 字段fields
新增数据(JSON形式)
# PUT 索引名/类型/文档id
PUT a1/doc/1
{
"name":"大郎",
"age":18
}
# 更新,version变化
PUT a1/doc/1
{
"name":"武大郎",
"age":16
}
# 查找
GET a1/doc/1
# 查找doc目录下所有,是个字典套列表套字典...
GET a1/doc/_search
# 删除
# DELETE 索引名/类型/文档id
DELETE a1/doc/3
# 全部删除(删除a1索引)
DELETE a1/
# 修改部分数据
# POST 索引名/类型/文档id/_update
POST s22/doc/1/_update
{
"doc": {
"age": 27
}
}
# PUT命令,在做修改操作时,如果未指定其他的属性,则按照指定的属性进行修改操作。所以修改不要用PUT
# 查询所有的索引
GET _cat/indices?v
#HEAD确认索引是否存在(200/404)
HEAD s22
查询年龄为18的数据
#简单搜索(查询字符串搜索)
GET s22/doc/_search?q=age:18
#DSL查询(重点)
GET s22/doc/_search
{
"query":{
"match":{
"age":"18"
}
}
}
# match 先分析关键字, 分词, 然后搜索
GET s22/doc/_search
{
"query":{
"match":{
"tag":"白 可爱" #分词拆成"白" "可" "爱"
}
}
}
# match_phrase 短语查询
GET s22/doc/_search
{
"query":{
"match_phrase":{
"tag":"可爱" #不拆分词
}
}
}
GET t1/doc/_search
{
"query":{
"title":{
"query": "中国世界",
"slop": 1 # 词之间的间隔
}
}
}
# match_all 查询所有
GET s22/doc/_search
{
"query":{
"match_all":{}
}
}
GET s22/doc/_search
{
"query": {
"match_all": {}
},
"sort": [ #与query平级
{
"FIELD": {
"order": "desc" #字段 降序(asc升序)
}
}
]
}
不是所有字段都能排序
GET s22/doc/_search
{
"query": {
"match_all": {}
},
"from": 0, #从第几条开始
"size":2 #返回几条
}
# 并且must
# 查询city是广州的,并且年龄25 (注意两个match的位置,must是个列表)
GET s22/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"city": "广州"
}
},
{
"match": {
"age":25
}
}
]
}
}
}
# 或者should
# 查询city是广州的,或者年龄22
GET s22/doc/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"city": "广州"
}
},
{
"match": {
"age": 22
}
}
]
}
}
}
# 非must_not
#查询city不是广州,年龄又不是29的
GET s22/doc/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"city": "广州"
}
},
{
"match": {
"age":29
}
}
]
}
}
}
# 过滤filter 范围值
#查询city是广州,年龄大于23的
GET s22/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"city": "广州"
}
}
],
"filter": {
"range": {
"age": {
"gt": 23, #"gte"大于等于
#"lte": 20
}
}
}
}
}
}
# 查询city是广州,或者年龄小于等于28的
# should和filter一起用的时候,先走filter再走should
GET s22/doc/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"city": "广州"
}
},
],
"filter": {
"range": {
"age": {
"lte": 28
}
}
}
}
}
}
# 总结:
must 与关系(相当于and)
should 或关系(相当于or)
must_not 非关系(相当于not)
filter 过滤条件
range 条件筛选范围
gt 大于
gte 大于等于
lt 小于
lte 小于等于
# 查询city是广州,或者年龄小于等于28的,要求显示结果只保留city和age字段
GET s22/doc/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"city": "广州"
}
}
],
"filter": {
"range": {
"age": {
"lte": 28
}
}
}
}
},
"_source": ["city","age"] #与query同级
}
#默认版的
GET s22/doc/_search
{
"query": {
"match": {
"desc": "成熟"
}
},
"_source": ["成熟"],
"highlight": { #高亮
"fields": { #指定字段
"desc": {}
}
}
}
#自定义高亮显示
GET s22/doc/_search
{
"query": {
"match": {
"desc": "成熟"
}
},
"_source": ["成熟"],
"highlight": {
"pre_tags": "<b style=‘color:yellow;font-size:20px‘>", #标签的前半部分,可定制style
"post_tags": "</b>", #标签的后半部分
"fields": { #字段
"desc": {}
}
}
}
#查平均年龄
GET s22/doc/_search
{
"query": {
"match_all": {}
},
"aggs": {
"my_avg": { #自己的起的别名
"avg": {
"field": "age"
}
}
}
}
#查最大年龄()
GET s22/doc/_search
{
"query": {
"match_all": {}
},
"aggs": {
"my_avg": {
"max": { # "min"最小; "sum"求和
"field": "age"
}
}
},
"from": 0, # 只返回聚合数据,不用看其余详细数据
"size": 0
}
#先查后聚合
GET s22/doc/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"avg_group": {
"range": {
"field": "age",
"ranges": [
{
"from": 15, #左包右不包
"to": 20
},
{
"from": 20,
"to": 25
},
{
"from": 25,
"to": 30
}
]
}
}
}
}
原文:https://www.cnblogs.com/straightup/p/13737578.html