ElasticSearch学习4--复杂查询

news2025/1/18 1:52:43

1、查询分类

  1. 查询所有:查询出所有数据,一般测试用。例如:match_all
  2. 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:

        match_query 根据单个字段查询
        multi_match_query  根据多个字段查询

        3.精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:

                ids  根据id查询
                range   根据范围查询
                term     精确查询
     4.地理(geo)查询:根据经纬度查询。例如:
                geo_distance   
                geo_bounding_box
     5.复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:
                bool
                function_score

基本语法:

GET /indexName/_search
{
  "query": {
    "查询类型": {
      "查询条件": "条件值"
    }
  }
}

2、查询所有

注意:因为性能问题,查询到的结果页面显示的不是全部。

 3、全文检索查询

match查询

:会对用户输入内容进行分词,然后去倒排索引库检索,只根据一个查询字段中是否包含用户输入的词分词后的词

比如用户输入赎吧安居客,先分词成赎吧和安居客两个词,然后查询fileId字段中包含赎吧和安居客其中任意一个词的文档

 先分词后查询

 multi_match查询

:多个字段查询,也是先对用户输入分词,分词后查询多个字段中任意一处符合即可

如输入B端赎吧,查询字段是 "fields": ["fileId","caseDes"],就是fileId和caseDes中只要有一处包含B端或赎吧即可返回

 copy_to属性

multi_match:根据多个字段查询,参与查询字段越多,查询性能越差,所以常用的是会将常参与查询的字段复制到一个字段中,如下将title字段和content字段拷贝到full_text字段中,查询时仅查询full_text字段即可,full_text字段并不存在,只是一种关联关系,可参与查询

copy_to属性是用来将一个字段的内容复制到另一个字段中的。这样可以实现对同一个文档的多个字段进行索引和搜索,适用于需要对特定字段进行更详细的搜索或分析的情况

PUT my_index
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "copy_to": "full_text"
      },
      "content": {
        "type": "text",
        "copy_to": "full_text"
      },
      "full_text": {
        "type": "text"
      }
    }
  }
}

4、精确查询

term 精确查询

主要用来查询不能分词的字段

根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段

查询oa名称为lilan04的文档,如果查询oa为lilan的查询不到数据

 range范围查询

主要用来查询范围内的数据,根据数值范围查询,可以是数值、日期的范围

 5、地理位置查询

geo_distance:查询到指定中心点小于某个距离值的所有文档

geo_bounding_box:查询geo_point值落在某个矩形范围的所有文档

// geo_bounding_box查询
GET /indexName/_search
{
  "query": {
    "geo_bounding_box": {
      "FIELD": {
        "top_left": {
          "lat": 31.1,
          "lon": 121.5
        },
        "bottom_right": {
          "lat": 30.9,
          "lon": 121.7
        }
      }
    }
  }
}
// geo_distance 查询
GET /indexName/_search
{
  "query": {
    "geo_distance": {
      "distance": "15km",
      "FIELD": "31.21,121.5"
    }
  }
}

6、复合查询

复合(compound)查询:复合查询可以将其它简单查询组合起来,实现更复杂的搜索逻辑

Function Score Query

fuction score:算分函数查询,可以控制文档相关性算分,控制文档排名。例如百度竞价

相关性算分:

当我们利用match查询时,文档结果会根据与搜索词条的关联度打分(_score),返回结果时按照分值降序排列。

function score query定义的三要素:

  1. 过滤条件:哪些文档要加分
  2. 算分函数:如何计算function  score
  3. 加权方式:function score 与 query score如何运算

 

Boolean Query

布尔查询是一个或多个查询子句的组合。子查询的组合方式有:
must:必须匹配每个子查询,类似“与”
should:选择性匹配子查询,类似“或”
must_not:必须不匹配,不参与算分,类似“非”
filter:必须匹配,不参与算分

如下:查询oa是lilan04时间在2023-01-01 -2023-08-15不能是已删除的文档信息

GET /case_management/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "oa": "lilan04"
        }}
      ],
      "should": [
        {
          "range": {
            "editTime": {
              "gte": 1684740000000,
              "lte": 1684740070219
            }
          }
        }
      ],
      "filter": {
       "term": {
         "isDelete": "1"
       }
      }
    }
    
  },
  "from": 100,
  "size": 20
}

7、搜索结果处理

排序

elasticsearch支持对搜索结果排序,默认是根据相关度算分(_score)来排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。

 按编辑时间排序

 分页

elasticsearch 默认情况下只返回top10的数据。而如果要查询更多数据就需要修改分页参数了。
elasticsearch中通过修改from、size参数来控制要返回的分页结果

针对深度分页,ES提供了两种解决方案,官方文档:
search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式。
scroll:原理将排序数据形成快照,保存在内存。官方已经不推荐使用。

高亮

高亮:就是在搜索结果中把搜索关键字突出显示

将搜索结果中的关键字用标签标记出来
在页面中给标签添加css样式

GET /books/_search
{
  "query": {
    "match": { "title": "javascript" }
  },
  "highlight": {
    "require_field_match": false,
    "fields": {
      "fieldTitle": {
        "pre_tags": ["<strong>"],
        "post_tags": ["</strong>"]
      },
      "fieldContent": {
        "pre_tags": ["<strong>"],
        "post_tags": ["</strong>"]
      }
    }
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/960232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

封装动态表单组件

技术栈&#xff1a;vue2 js webpack 需求&#xff1a; 利用数据渲染表单&#xff0c;实现代码的精简化及效率的提升。 效果图&#xff1a; 封装的组件&#xff1a; <div v-if"formConfig"><el-formv-bind"$attrs"ref"formDom":model…

为什么你懂英语但不能说流利 学习

目录 对于提升口语流畅度&#xff1a; 我们应该做到是输入和输出占比为3&#xff1a;7&#xff1b;可实际做到的是7&#xff1a;3 但是这个方法也有一个问题&#xff0c;就是没有错误反馈 最好的就是在一个开始的时候&#xff0c;就学对&#xff0c;第一次的效果很重要 另…

vscode中讨厌的蓝色波浪线的去除小trick和原理

问题描述 不小心“设置同步”时和远程电脑的合并&#xff08;merge&#xff09;了&#xff0c;然后就出现了这个问题&#xff01;烦死了&#xff01;&#xff01;&#xff01; 大概是这个样子&#xff1a; 解决办法 站在了巨人的肩膀上&#xff0c;在下图位置输入这样一行参数&…

【TCP】四次挥手(最强详解!!通俗易懂!!)

目录 想要了解三次握手的话可以参考我的另外一篇博客 首先来了解一下FIN和ACK FIN ACK 接着我们再来具体的了解TCP四次挥手过程 转换为最最通俗理解方法: 想要了解三次握手的话可以参考我的另外一篇博客 【TCP】三次握手&#xff08;最强详解&#xff01;&#xff01;通俗…

DVWA XSS

反射型 low 查看源代码&#xff0c;没有任何过滤 构造 medium 这里是过滤了 high 这里把双写和大小写和JavaScript都过滤了,用事件来绕过<img src0 οnerrοralert(“xss”)> impossible 这里使用htmlspecialchars进行实体转换并且输出的结果还不能使用事件来…

HarmonyOS/OpenHarmony(Stage模型)应用开发单一手势(一)

一、点击手势&#xff08;TapGesture&#xff09; TapGesture(value?:{count?:number; fingers?:number}) 点击手势支持单次点击和多次点击&#xff0c;拥有两个可选参数&#xff1a; count&#xff1a;非必填参数&#xff0c;声明该点击手势识别的连续点击次数。默认值为…

Python Qt学习(七)Listview

源代码&#xff1a; # -*- coding: utf-8 -*-# Form implementation generated from reading ui file qt_listview.ui # # Created by: PyQt5 UI code generator 5.15.9 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not…

数据库设计DDL

DDL&#xff1a;数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表&#xff09; DDL&#xff08;数据库操作&#xff09; 查询&#xff1a; 查询所有数据库&#xff1a;show databases; 查询当前数据库&#xff1a;select database(); 使用&#xff1a; 使用…

前端实习第七周周记

前言 第六周没写&#xff0c;是因为第六周的前两天在处理第五周的样本库部分。问题解决一个是嵌套问题&#xff08;因为我用到了递归&#xff09;&#xff0c;还有一个问题在于本机没有问题&#xff0c;打包上线接口404。这个问题我会在这周的总结中说。 第六周第三天才谈好新…

RT-Thread 线程管理(二)

系统线程 系统线程是指由系统创建的线程&#xff0c;用户线程是由用户程序调用线程管理接口创建的线程&#xff0c;在 RT-Thread 内核中的系统线程有空闲线程和主线程。 空闲线程 空闲线程&#xff08;idle&#xff09;是系统创建的最低优先级的线程&#xff0c;线程状态永远…

解决D盘的类型不是基本,而是动态的问题

一、正确的图片 1.1图片 1.2本人遇到的问题 二、将动态磁盘 转为基本盘 2.1 基本概念&#xff0c;动态无法转化为基本&#xff0c;不是双向的&#xff0c;借助软件 网址&#xff1a;转换动态磁盘到普通磁盘_检测到计算机本地磁盘为动态分区_卫水金波的博客-CSDN博客 2.2分区…

每日一题 2240. 买钢笔和铅笔的方案数

难度&#xff1a;中等 枚举就行 class Solution:def waysToBuyPensPencils(self, total: int, cost1: int, cost2: int) -> int:res 0for i in range(total//cost1 1):res (total - i * cost1) // cost2res 1return res

高等数学啃书汇总重难点(四)不定积分

本章主要考察方法性的技巧&#xff0c;对于某些理论性的概念&#xff0c;建议在练习中加强理解&#xff0c;不定积分的要义在于不断练习、不断拓宽眼界 一.不定积分的概念 二.原函数存在定理 三.不定积分的定义 四.基本积分表 五.不定积分的性质 六.一类换元法 七.二类换元法 八…

phpstorm配置链接sqlserver数据库

开启sqlserver的TCP/IP 1433端口

硬件性能评估指标-DMIPS、MFLOPS、MAC、TOPS

硬件性能评估指标-DMIPS、MFLOPS、MAC、TOPS DMIPS&#xff08;Dhrystone Million Instructions Per Second&#xff09;&#xff1a; DMIPS用于衡量计算机系统的整体指令执行性能&#xff0c;通常关注整数操作。它基于Dhrystone基准测试来计算&#xff0c;该测试主要包含整数运…

如何利用好 IntelliJ IDEA 的调试功能辅助代码调试

文章目录 调试的重要性配置断点启动调试利用 IntelliJ IDEA 的调试功能观察变量和表达式单步执行和逐级跳转查看调用栈条件断点监视变量远程调试使用断点条件和日志 调试最佳实践总结 &#x1f389;欢迎来到Java学习路线专栏~如何利用好 IntelliJ IDEA 的调试功能辅助代码调试 …

YOLOv8超参数调优教程! 使用Ray Tune进行高效的超参数调优!

原创文章为博主个人所有,未经授权不得转载、摘编、倒卖、洗稿或利用其它方式使用上述作品。违反上述声明者,本站将追求其相关法律责任。 这篇博文带大家玩点新的东西,也是一直以来困扰大家最大的问题—超参数调优! 之前的 YOLOv5 我使用遗传算法做过很多次调优,实验一跑就…

实战项目 在线学院之集成springsecurity

一 操作配置 1.0 工程结构 1.1 在common下创建spring_security模块 1.2 pom文件中依赖的注入 1.3 在service_acl模块服务中引入spring-security权限认证模块 1.3.1 service_acl引入spring-security 1.3.2 在service_acl编写查询数据库信息 定义userDetailServiceImpl 查询用…

day08-领取优惠券(高并发优化:超卖、锁失效、事务边界、事务失效)

由于优惠券的发放数量限制、每人限领数量限制&#xff0c;因此在领取优惠券的过程中必须判断优惠券的库存以及当前用户的领取数量。也就是避免出现超发现象&#xff0c;这跟电商中的库存超卖是处理是类似的。 通过今天的学习&#xff0c;希望大家可以达成下列目标&#xff1a;…