首页 > 其他分享 >Elasticsearch篇:Elasticsearch增、删、改、查

Elasticsearch篇:Elasticsearch增、删、改、查

时间:2022-08-24 18:06:04浏览次数:75  
标签:search lqz GET Elasticsearch query match

目录

一、Elasticsearch的文档增删查改(CURD)

# 增
PUT lqz/_doc/1
{
  "name":"顾老二",
  "age":30,
  "from": "gu",
  "desc": "皮肤黑、武器长、性格直",
  "tags": ["黑", "长", "直"]
}

# 删 
DELETE lqz/_doc/4
# 改
# 修改1:如果之前没有,就是新增,如果之前有,会使用新的覆盖掉旧的(新的字段少,少的字段会被删除)
PUT lqz/_doc/1
{
  "desc":"皮肤很黄,武器很长,性格很直",
  "tags":["很黄","很长", "很直"]
}

# 修改2---这个多
POST lqz/_doc/2/_update
{
  "doc": {
    "desc": "皮肤很黄,武器很长,性格很直",
    "tags": ["很黄","很长", "很直"]
  }
}

# 查(复杂)
# 根据id查,查单条
GET lqz/_doc/1

二、Elasticsearch之查询的两种方式

# 查询方式一:
GET lqz/_search?q=from:gu
GET lqz/_search?q=age:30


# 查询方式二:结构化查询,查询要放到query字典中,使用match查询,条件有且只有一个
GET lqz/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  }
}

三、term与match查询

# term和match有什么区别?
	-match:进行搜索的时候,会先进行分词,分词完后,再来匹配,全文检索用它
    -term:term是代表完全匹配,也就是精确查询,搜索前不会再对搜索词进行分词
    -如果查的类型是keyword类型,用term比较好
    -如果全文检索,text类型,用match较好
    
    
# match_all:查询所有
GET lqz/_search
{
  "query": {
    "match_all": {
    }
  }
}


# 短语查询之match_phrase   中国和世界之间最多有2个字符
GET t1/_search
{
  "query": {
    "match_phrase": {
      "title": {
        "query": "中国世界",
        "slop": 2
      }
    }
  }
}

# 最左前缀match_phrase_prefix
-查询一bea开头的单词
GET t3/_search
{
  "query": {
    "match_phrase_prefix": {
      "desc": "bea"
    }
  }
}

四、Elasticsearch之排序查询

GET lqz/_search
{
  "query": {
    "match": {
      "from": "gu"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}


# 不是所有字段都可以排序,只有数字字段可以

五、Elasticsearch之分页查询

GET lqz/_search
{
  "query": {
    "match_all": {}
  },
    "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 2
}

六、Elasticsearch之布尔查询

# 多个条件的查询
must(and)
should(or)
must_not(not)
filter

# and条件
GET lqz/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "age": "28"
          }
        }
      ]
    }
  }
}


## or条件
GET lqz/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "tags": "闭月"
          }
        }
      ]
    }
  }
}

# 取反
GET lqz/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "from": "gu"
          }
        },
        {
          "match": {
            "tags": "可爱"
          }
        },
        {
          "match": {
            "age": 18
          }
        }
      ]
    }
  }
}

# filter
GET lqz/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {
          }
        }
      ],
      "filter": {
        "range": {
          "age": {
            "lte": 25
          }
        }
      }
    }
  }
}


# 小结
must:与关系,相当于关系型数据库中的and。
should:或关系,相当于关系型数据库中的or。
must_not:非关系,相当于关系型数据库中的not。

filter:过滤条件。
range:条件筛选范围。
gt:大于,相当于关系型数据库中的>。
gte:大于等于,相当于关系型数据库中的>=。
lt:小于,相当于关系型数据库中的<。
lte:小于等于,相当于关系型数据库中的<=。

七、Elasticsearch之查询结果过滤

GET lqz/_search
{
  "query": {
    "match": {
      "name": "顾老二"
    }
  },
  "_source": ["name", "age"]
}

八、Elasticsearch之高亮查询

# 基本使用
GET lqz/_search
{
  "query": {
    "match": {
      "name": "石头"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}


# 自定义高亮显示
GET lqz/_search
{
  "query": {
    "match": {
      "name": "石头"
    }
  },
  "highlight": {
    "pre_tags": "<b class='key' style='color:red'>",
    "post_tags": "</b>",
    "fields": {
      "name": {}
    }
  }
}

<b class='key' style='color:red'>石</b><b class='key' style='color:red'>头</b>

九、Elasticsearch之聚合函数

# 聚合函数
avg
max
min
sum


GET lqz/_search
{
  "query": {
    "match_all": {
    }
  },
  "aggs": {
    "my_avg": {
      "sum": {
        "field": "age"
      }
    }
  }
}


# 分组
GET lqz/_search
{
  "size": 0, 
  "query": {
    "match_all": {}
  },
  "aggs": {
    "age_group": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "from": 15,
            "to": 20
          },
          {
            "from": 20,
            "to": 25
          },
          {
            "from": 25,
            "to": 30
          }
        ]
      }
    }
  }
}

十、Elasticsearch for Python之连接

# import requests
#
# res=requests.get('http://localhost:9200/lqz/_doc/2').json()
# print(res['_source'])

# es官方提供的操作的包,es的客户端
from elasticsearch import Elasticsearch

# es是7版本,模块也要用7版本
obj = Elasticsearch(hosts=['http://127.0.0.1:9200', ])
# 创建索引(Index)
# result = obj.indices.create(index='user',ignore=[400, 404])
# result = obj.indices.delete(index='user', ignore=[400, 404])
# print(result)


# 插入数据
# data = {'userid': '1', 'username': 'lqz','password':'123'}
# result = obj.create(index='user1',id=2, document=data)
# print(result)
# 更新数据

# data = {'password': '888', 'test': '88'}
# result = obj.update(index='user1', doc=data, id=2)
# print(result)

# 删除数据
# result = obj.delete(index='user1',id=1)

# 查询
# 查找所有文档
# query = {'query': {'match_all': {}}}
#  查找名字叫做jack的所有文档
query = {'query': {'term': {'from': 'gu'}}}

# 查找年龄大于11的所有文档
# query = {'query': {'range': {'age': {'gt': 11}}}}
#
allDoc = obj.search(index='lqz', body=query)
# print(allDoc)
print(allDoc['hits']['hits'][0]['_source'])

十一、Elasticsearch高级之-集群搭建,数据分片

标签:search,lqz,GET,Elasticsearch,query,match
From: https://www.cnblogs.com/williama/p/16621070.html

相关文章

  • elasticsearch学习
                  评分算法7.0之前是TF-IDF,7.0之后是BM25算法......
  • Yii2 ElasticSearch aggregate (group)
    我想要统计的是country_code出现的次数,通过yii2的ElasticSearch扩展,上面的例子满足我的需要。业务场景:在fecify商城中,使用elasticSearch搜索,进行aggregategrou......
  • springboot~elasticsearch对nested集合类型的字段进行不等于的检索
    对于es的数据类型来说,如果它是一个复杂类型,而我们需要把复杂类型进行检索,那么应该定义成nested类型,而对于它的检索,如果是非集合数据,它与其它类型没有分别;而如果你的nested......
  • Elasticsearch篇:Elasticsearch介绍安装及使用
    目录一、Elasticsearch介绍二、安装一、Elasticsearch介绍#大规模数据如何存储和检索---》elasticsearch#Elasticsearch是一个基于Lucene的分布式搜索和分析引擎,分......
  • elasticsearch安装(Windows)遇到的问题
    1、运行:/bin/elasticsearch.bat注意:9300为ElasticSearch集群间组件的通信端口,9200为浏览器访问的http协议RESTful端口;输入地址http://localhost:9200结果:访问失败!尚......
  • Elasticsearch 索引修复
    Elasticsearch7.X点击查看代码#!/bin/bashmaster=$(curl-s'http://172.17.89.243:9200/_cat/master?v'|grep-v'ip'|awk'{print$1}')forindexin$(curl......
  • Elasticsearch重建索引
    Elasticsearch打开/关闭索引?先说说什么是关闭索引?一旦索引被关闭,那么这个索引只能显示元数据信息,不能够进行读写操作我们想关闭test索引:点击查看代码POSThttp://I......
  • Elasticsearch基本操作
    索引操作创建索引PUT/user查询指定索引GET/user查询所有索引信息GET_cat/indices?v删除索引DELETE/user类型映射自动映射elasticsearch默认情况下会自......
  • Elasticsearch Java client使用
    前言Elasticsearch官方列出了好几个客户端,如下所示JavaClientJavaRestClient(JavaHighLevelRESTClient)JavaTransportClient其中JavaRestClient在7.15.0被......
  • Elasticsearch 实战
    需求假设现在有这么一个需求,系统接了很多的报文,需要提供全文检索,为了简化,报文目前只有类型,流水号,内容这三个字段。索引设计建立msg索引,映射规则如下PUT/msg{ "mappi......