Elasticsearch 的使用

本文详细介绍了如何在Elasticsearch中创建索引,包括指定不同类型字段的操作,以及删除索引、查询索引结构、添加和查询文档的方法。涵盖了复杂查询技巧如match、sort、多条件查询等,适合深入理解搜索引擎索引管理。

一、创建索引

指定字段的类型创建索引

类似于建库(建立索引和字段对应类型),也可看做规则的建立

PUT /索引名称/类型名称/1
{
   数据
}

 字段的数据类型:

(1)字符串类型
text、keyword
区别
- text:支持分词,全文检索,支持模糊、精确查询,不支持聚合,排序
操作;text类型的最大支持的字符长度无限制,适合大字段存储;
- keyword:不进行分词,直接索引、支持模糊、支持精确匹配,支持
聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8
类型的字符,可以通过设置ignore_above指定自持字符长度,超过给
定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
(2)数值型
long、Integer、short、byte、double、flfloat、half flfloat
scaled flfloat
(3)日期类型
date
(4)te布尔类型
boolean
(5)二进制类型
binary
等等

二、删除索引

DELETE /索引名

三、查询全部索引

GET /_cat/indices?v

四、查询索引结构

GET /索引名
获取默认类型
GET /索引名
_doc 默认类型(default type),type 在未来的版本中会逐渐弃用,
因此产生一个默认类型进行代替
        如果自己的文档字段没有被指定,那么ElasticSearch就会给我们默认
配置字段类型

五、添加文档记录

1.指定id添加

#指定id
PUT /gsh1/_doc/1
{
  "name":"张三",
  "age":25
}

2.不指定id添加

会随机生成一个id

#不指定id
POST /gsh1/_doc
{
  "name":"李四",
  "age":23
}

六、查询文档(根据id查询)

查询提交方式必须为GET

GET /索引名称/类型名称/id值

七、删除文档

提交方式DELETE提交方式

根据不同的操作具有不同的提交方式restful风格

GET 查询
PUT 修改
POST 添加操作
DELETE 删除操作

八、修改文档

两种方法

1.修改所有的列(使用put覆盖原来的值):

        版本+1_version

        这种修改必须要求指定所有列,如果只指定部分列,则原来其他列消失。

PUT /索引名/类型名/id{

        修改的数据

}

2.只修改部分列(使用postupdate

version不会改变
需要注意doc
不会丢失字段
#修改部分列
POST /gsh1/_doc/1/_update
{
  "doc":{
    "name":"周杰伦",
    "age":18
  }
}

九、根据其他条件查询(复杂查询)

①查询匹配
match:匹配(会使用分词器解析(先分析文档,然后进行查询))
_source:过滤字段
sort:排序
formsize 分页
②多条件查询(bool
must 相当于 and
should 相当于 or
must_not 相当于 not (... and ...)
filter 过滤

1.查询所有文档

相当于sql语句中的select * from 表名

GET /索引名/类型名/_search

#查询全部文档
GET /gsh1/_doc/_search

2.根据条件查询

相当于sql中的select * from 表名 where 列名=值

GET /索引名称/类型名称/_search?q=字段名:值

#根据条件查询
GET /gsh1/_doc/_search?q=age:23

3.将查询的格式转为JSON格式

#将查询的条件封装成json格式
GET /gsh1/_doc/_search
{
  "query":{
    "match":{
      "age":26
    }
  }
}

4.只查询出部分列(过滤查询)

#只查询部分列
GET /gsh1/_doc/_search
{
  "query":{
    "match":{
      "age":25
    }
  },
  "_source":["age"]
}

5.分页查询

相当于sql语句中的select * from 表名 where limit 0,5

from:从第几条记录开始查询

size:每页显示的记录数

#分页查询
GET /gsh1/_doc/_search
{
  "query":{
    "match":{
      "age":25
    }
  },
  "_source":["name","age"],
  "from":1,
  "size":1
}

6.范围查找(range)

gt:大于

lt:小于

#range范围查找
GET /user/_search
{
  "query": {
    "range": {
      "age": {
        "gt": 3
        , "lt": 20
      }
    }
  }
}

7.精准匹配(term)

#term精准匹配
GET /user/_search
{
  "query": {
    "term": {
      "name": {
        "value": "马"
      }
    }
  }
}

8.排序(sort)

order:排序规则

desc:降序

asc:升序

#排序
GET /user/_search
{
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

9.must查询

must相当于and

#must查询相当于and
GET /user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "马"
          }
        },
        {
          "match": {
            "age": "18"
          }
        }
      ]
    }
  }
}

10.should查询

should相当于or

#should查询相当于or
GET /user/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match":{
              "name":"刘"
            }
        },
        {
          "match":{
              "name":"刘"
            }
        }
       
      ]
    }
  }
}

11.取反must_not

must_not相当于not

#取反must_not
GET /user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "name": "马"
          }
        }
      ]
    }
  }
}

12.高量查询

#高亮查询
GET /user/_search
{
  "query": {
    "match": {
      "name": "马"
    }
  },
  "highlight": {
    "pre_tags": "<font color='red'>",
    "post_tags": "</font>"
    , "fields": {
      "name": {}
    }
    
  }
}

### 使用Elasticsearch进行搜索和数据分析 #### 安装与初始化 要使用 Elasticsearch 进行操作,首先需要创建一个 Elasticsearch 客户端实例。这可以通过 Python 的 `elasticsearch` 库实现[^2]。 ```python from elasticsearch import Elasticsearch es_client = Elasticsearch(hosts=["http://localhost:9200"]) if es_client.ping(): print("成功连接到Elasticsearch!") else: print("无法连接到Elasticsearch.") ``` #### 数据索引 为了使数据可被搜索和分析,需先将其存入 Elasticsearch 中的一个索引里。以下展示了如何向名为 `myindex` 的索引中添加文档[^1]: ```json POST /myindex/_doc/ { "title": "Elasticsearch基础", "content": "Elasticsearch是一个强大的搜索和分析引擎,它可以帮助我们高效地处理和分析大量数据。" } ``` 上述 JSON 请求会将一条记录写入指定的索引中。每条记录都有字段(如 title 和 content),这些字段可以用于后续查询和聚合操作。 #### 基本搜索 执行基本搜索可通过发送 GET 请求完成。例如,查找所有包含特定关键词的内容[^4]: ```json GET /myindex/_search { "query": { "match": { "content": "强大" } } } ``` 此请求会在 `content` 字段中寻找含有 “强大” 关键词的所有文档。 #### 高级数据分析——聚合功能 除了简单的搜索外,Elasticsearch 提供了丰富的聚合功能来支持复杂的数据分析需求[^3]。比如统计某个字段的不同取值及其频率: ```json GET /myindex/_search { "size": 0, "aggs": { "unique_titles": { "terms": { "field": "title.keyword", "size": 10 } } } } ``` 这段代码实现了基于 `title` 字段的分组计数,并返回前十个最常见的标题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值