ElasticSearch学习:文档的基本操作

2023-11-10

上一个我们基本是围绕索引操作,里面的指定类型,或者文档里面的一些属性。

这里是主要关注文档操作,毕竟主要常见的操作就是围绕文档内容来进行的,毕竟主要是做搜索。

首先先导入一些数据进去。
一 简单的查询操作

put /testdoc/user/1
{
  "name": "张三",
  "age": 28,
  "desc": "法外狂徒",
  "tags": ["旅游", "渣男", "交友"]
}
 
put /testdoc/user/2
{
  "name": "李四",
  "age": 30,
  "desc": "佳木斯大拐",
  "tags": ["旅游", "靓女", "唱歌"]
}
 

#以下是查询
#id查询
GET testdoc/user/1
 
 #分词查询
GET testdoc/user/_search?q=name:张

以下是GET testdoc/user/_search?q=name:张 的返回结果:

{
  "took" : 9,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.6931471,
    "hits" : [
      {
        "_index" : "testdoc",
        "_type" : "user",
        "_id" : "1",
        "_score" : 0.6931471,
        "_source" : {
          "name" : "张三",
          "age" : 28,
          "desc" : "法外狂徒",
          "tags" : [
            "旅游",
            "渣男",
            "交友"
          ]
        }
      }
    ]
  }
}

二 复杂的查询
排序、分页、高亮、模糊查询、标准查询
首先再添加俩用户

put /testdoc/user/3
{
  "name": "王二麻子",
  "age": 28,
  "desc": "买豆腐",
  "tags": ["游戏", "猛男", "宅"]
}
 
put /testdoc/user/4
{
  "name": "王二麻",
  "age": 30,
  "desc": "主播",
  "tags": ["直播", "购物", "吹牛"]
}

模糊查询

GET testdoc/user/_search
{
  "query": {
    "match": {
      "name": "王二麻"
    }
  }
}

返回结果

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 2.5518394,
    "hits" : [
      {
        "_index" : "testdoc",
        "_type" : "user",
        "_id" : "4",
        "_score" : 2.5518394,
        "_source" : {
          "name" : "王二麻",
          "age" : 30,
          "desc" : "主播",
          "tags" : [
            "直播",
            "购物",
            "吹牛"
          ]
        }
      },
      {
        "_index" : "testdoc",
        "_type" : "user",
        "_id" : "3",
        "_score" : 2.234622,
        "_source" : {
          "name" : "王二麻子",
          "age" : 28,
          "desc" : "买豆腐",
          "tags" : [
            "游戏",
            "猛男",
            "宅"
          ]
        }
      }
    ]
  }
}

套用一下别人的截图
在这里插入图片描述
针对模糊搜索的添加过滤

#真对_source的过滤
#_source先看一下都有些什么
{
  "_index" : "testdoc",
  "_type" : "user",
  "_id" : "4",
  "_version" : 2,
  "_seq_no" : 4,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "王二麻",
    "age" : 30,
    "desc" : "主播",
    "tags" : [
      "直播",
      "购物",
      "吹牛"
    ]
  }
}



#根据_source里面的name和desc来过滤
GET testdoc/user/_search
{
  "query": {
    "match": {
      "name": "王二麻"
    }
  },
  "_source": ["name", "desc"]
}

排序过滤

# ASC 升序 DESC降序
GET testdoc/user/_search
{
  "query": {
    "match": {
      "name": "王二麻"
    }
  },
  "sort":[{
    "age": "asc"
  }]
}

分页查询

#这里的form和size类似我们的分页参数的pageNum和pageSize
GET testdoc/user/_search
{
  "query": {
    "match": {
      "name": "王二麻"
    }
  },
  "sort":[{
    "age": "asc"
  }],
  "from":0,
  "size":1
}

布尔值查询
这里要注意bool的几个设置,must shuould must_not gt大于 lt小于 (当然还有gte 大于等于 lte 小于等于)


# 多条件查询 must 相当于and
GET testdoc/user/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "name": "王二麻"
        }},
        {"match": {
          "age": 30
        }}
      ]
    }
  }
}


# 多条件查询 should 相当于or
GET testdoc/user/_search
{
  "query": {
    "bool": {
      "should": [
        {"match": {
          "name": "王二麻"
        }},
        {"match": {
          "age": 30
        }}
      ]
    }
  }
}


# 多条件查询 must_not 相当于 not
GET testdoc/user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"match": {
          "name": "王二麻"
        }},
        {"match": {
          "age": 30
        }}
      ]
    }
  }
}


# 过滤查询1 age > 24

GET testdoc/user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"match": {
          "name": "王二麻"
        }}
      ],
      
       "filter": [
        {"range": {
          "age": {
            "gt": 24
          }
        }}
      ]

    }
  }
}


# 过滤器2  22<age<30
GET testdoc/user/_search
{
  "query": {
    "bool": {
      "must_not": [
        {"match": {
          "name": "王二麻"
        }}
      ],
      
        "filter": [
        {"range": {
          "age": {
            "lt": 28,
            "gt": 25
          }
        }}
      ]

    }
  }
}

多条件查询
实际还是match匹配的引用,只不过不是完全用上面那些关键字来

GET testdoc/user/_search
{
  "query": {
    "match": {
      "tags": "主播 男"
    }
  }
}

精确插叙
term关键字根据底层的倒排索引
于match对比:

  • term直接精确查找
  • match根据分词器来查找

keyword类型和text类型
keyword类型不会被分词器解析,term: 精确匹配

PUT test4
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "desc": {
        "type": "keyword"
      }
    }
  }
}


PUT /test4/_doc/1
{
  "name": "Java Name",
  "desc": "Java Desc"
}

PUT /test4/_doc/2
{
  "name": "Java Name",
  "desc": "Java Desc 2"
}


GET test4/_search
{
  "query": {
    "term": {
      "desc": "ZP Java Desc"
    }
  }
}

# 按照text类型匹配(查不到可能是自己的分词器不行我这个用的是ik,没加别的分词器,单词的匹配就不行)
GET test4/_search
{
  "query": {
    "term": {
      "desc": "Java"
    }
  }
}

_analyze, _explain是Elasticsearch提供的辅助API,经常不为人所知和所用。_explain 用来帮助分析文档的relevance score是如何计算出来的,而_analyze是Elasticsearch一个非常有用的API,它可以帮助你分析每一个field或者某个analyzer/tokenizer是如何分析和索引一段文字。

GET test4/_search
{
  "query": {
    "term": {
      "desc": "ZP Java Desc"
    }
  }
}




GET _analyze
{
  "analyzer": "standard",
  "text":"ZP JAVA"
}


多个值精确匹配

PUT /test_db/_doc/3
{
  "t1": "22",
  "t2": "2020-09-10"
}
 
PUT /test_db/_doc/4
{
  "t1": "33",
  "t2": "2020-09-11"
}
 
GET test_db/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "t1": "22"
          }
        },
         {
          "term": {
            "t1": "33"
          }
        }
      ]
    }
  }
}

高亮查询

GET test5/user/_search
{
  "query": {
    "match": {
      "name": "张三"
    }
  },
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'>",
    "post_tags": "</p>", 
    "fields": {
      "name": {}
    }
  }
}

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElasticSearch学习:文档的基本操作 的相关文章

随机推荐

  • Linux内核源码分析-进程调度(三)-从进程创建到唤醒的过程去了解CFS调度器

    从进程创建到唤醒的过程去了解CFS调度器 从do fork开始 创建子进程 初始化新建进程p相关的调度参数 cfs的task fork操作 更新cfs rq上正在运行的进程的运行时间信息 更新cfs rq的最小虚拟运行时间 更新进程p对应的
  • redis学习笔记

    概述 redis可以当作缓存来使用 存在内存里 比读数据库更快 但是比从内存变量里取数据还是要慢不少的 redis sql 内存变量的对比 按存取速度来看 内存变量最快 sql最慢 但按照持久化的角度来说正好相反 各有优缺点 按需选择使用
  • 加法乘法原理、排列组合、线性规划

    排列组合 1 加法原理与乘法原理 加法原理 分类思想 一个事件的发生 分为几类事件的发生 通俗的说是好几种情况的发生 乘法原理 分步思想 一个事件的发生 分为几个子事件分步发生 这里要注意 1 子事件 如何把事件划分为几个子事件呢 子事件是
  • dlopen “no suitable image found ”问题之解决

    做一个练手小项目 基于 react transform boilerplate 的demo 克隆 react transform boilerplate项目 装包 package json中的包 style loader css loade
  • 并发、并行、同步、异步的概念

    并发与并行 假设一个工厂 包含多个车间 一个车间包含多个工人和多个房间 什么是cpu 工厂是时刻在运行的 因此可以理解cpu时刻在运行 什么cpu的核数 假设把一个cpu比作一份电量的话 一份电量又只能满足一个车间运行 那么其他车间就得停止
  • 使用python写一个星球大战游戏.py

    如果要使用 Python 写一个类似于星球大战的游戏 需要用到一些专业的游戏引擎 比如 Pygame 首先 需要安装 Pygame 库 可以使用以下命令进行安装 pipinstall pygame 其次 可以在 Pygame 中使用 pyt
  • 网络安全人才青黄不接、数字化转型迫在眉睫、你还在犹豫吗?

    大专能不能学网络安全呢 大专学网络安全能不能找到工作呢 大专学网络安全有竞争力吗 网络上关于质疑大专学历进入网络安全行业的声音越来越多了 居然有很多人在质疑大专学历从事网络安全没有竞争力 很多人看到某些招聘软件上起薪12K的薪资就望而却步了
  • Linux文件管理

    成功不易 加倍努力 1 文件系统目录结构 1 1文件系统的目录结构 1 2 常见的文件系统目录功能 1 3 应用程序的组成部分 1 4 Linux下的文件类型 2 文件操作命令 2 1 显示当前工作目录 2 2 绝对和相对路径 2 3 更改
  • Nano编辑器安装使用指南

    关于nano Nano编辑器是一个命令行文本编辑器 具有简单易用的界面和一些基本功能 Nano小巧友好 提供许多额外的特性 例如交互式的查找和替换 定位到指定的行列 自动缩进 特性切换 国际化支持 文件名标记完成等 Nano是为了代替闭源的
  • 《Zookeeper-分布式过程系统技术详解》第一部分基础概念笔记学习

    1 Zookeep的客户端API功能强大 其中包括 保障强一致性 有序性和持久性 实现通用的同步原语的能力 在实际分布式系统中 并发往往导致不正确的行为 ZooKeeper提供了一种简单的并发处理机制 2 ZooKeeper不适用的场景 整
  • 重新学javaweb---JSTL标签

    JSTL简介 标准标签库JSTL的全名为 Java Server Pages Standard Tag Library JSTL主要提供了5大类标签库 核心标签库 为日常任务提供通用支持 如显示和设置变量 重复使用一组项目 测试条件以及其他
  • Promise常用API介绍

    Promise中的API PromiseState 实例对象中的一个属性 Promisestate 状态 pending 未决定 resolved fullfilled 成功 rejected 失败 pending 变为resolved p
  • CSDN周赛64期题解(含部分代码)

    计算之魂 主题周赛如期回归 因为差不多每次都是新题 让人多了点期待 相信非编程题无需多言 答案都在书里 翻书翻得快 满分无障碍 当然 如果提前读过此书就更好了 比如原书中把金块切了 2 刀 问题中扩展了一下 变成切 9 刀 如果提前理解过原
  • 【推荐系统】 一、推荐系统简介

    1 推荐系统的作用和意义 在这个时代 无论信息消费者还是信息生产者都面临巨大的挑战 信息消费者 在大量信息中找到自己感兴趣的信息很困难 信息生产者 将自己生产的信息让广大消费者关注很困难 推荐系统将用户与信息联系起来 1 1 用户角度 推荐
  • Mysql语句执行顺序

    1 SQL书写顺序 select distinct 显示字段 from 表名 join 要连接的表名 on 连接查询条件 where 约束条件 group by 分组字段 having 分组过滤条件 order By DESC 降序 或AS
  • NSLog效率低下的原因以及NSLog宏定义

    我是前言 打Log是我们debug时最简单朴素的方法 NSLog 对于objc开发就像 printf 对于c一样重要 但在使用 NSLog 打印大量Log 尤其是在游戏开发时 如每一帧都打印数据 NSLog 会明显的拖慢程序的运行速度 游戏
  • java实现敏感词过滤算法DFA并忽略敏感词中的特殊字符

    参考文章 https blog csdn net chenssy article details 26961957 补充说明 1 具体的DFA介绍参考原文章 此处只是补充了文章中没有介绍的点以及根据实际需求进行了改造 2 最大 小匹配规则
  • Flask学习笔记_BBS论坛搭建(三)

    Flask学习笔记 BBS论坛搭建 三 1 cms管理 1 1 项目模块划分 目录结构搭建 1 2 每个模块注册蓝图 并绑定 1 3 数据库配置 连接 迁移控制 这里本来用了flask script 但migrate的新版不支持他了 所以就
  • CSDN竞赛第41期题解

    CSDN竞赛第41期题解 非编程题部分 第一题 算盘是一种古代中国发明的计算机 原因在于人们在操作算盘时可以充分利用人脑的计算能力 错的 第二题 以下选项中 哪一项不属于计算机的本质特征 C 受电力驱动 电力不是本质特征 第三题 布莱兹 帕
  • ElasticSearch学习:文档的基本操作

    上一个我们基本是围绕索引操作 里面的指定类型 或者文档里面的一些属性 这里是主要关注文档操作 毕竟主要常见的操作就是围绕文档内容来进行的 毕竟主要是做搜索 首先先导入一些数据进去 一 简单的查询操作 put testdoc user 1 n