ElasticSearch学习4--复杂查询

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>"]
      }
    }
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA 设置提示信息

IDEA 设置提示信息 File->Settings->Editor->Code Completion 取消勾选 Math case

Nginx百科之gzip压缩、黑白名单、防盗链、零拷贝、跨域、双机热备

引言 早期的业务都是基于单体节点部署&#xff0c;由于前期访问流量不大&#xff0c;因此单体结构也可满足需求&#xff0c;但随着业务增长&#xff0c;流量也越来越大&#xff0c;那么最终单台服务器受到的访问压力也会逐步增高。时间一长&#xff0c;单台服务器性能无法跟上业…

xx音乐app逆向分析

目标 看一下评论的请求 抓包 这里使用httpcanary 请求包如下 POST /index.php?rcommentsv2/getCommentWithLike&codeca53b96fe5a1d9c22d71c8f522ef7c4f&childrenidcollection_3_1069003079_330_0&kugouid1959585341&ver10&clienttoken7123ecc548ec46d…

(c++)类和对象 上篇

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 5.类的作用域 6.类的实例化 7.类的对象大小的计算 8.类成员函数的this指针 1.面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步…

PostGIS空间数据中基础常用函数介绍

目录 前言 一、基础数据 1、数据结构准备 2、基础数据构造 二、常用空间函数 1、st_srid 获取空间对象SRID 2、st_asgeojson geojson转换 3、st_aswkt wkt支持 4、st_area 面积计算 5、ST_Buffer 缓冲区 6、其它函数 总结 前言 近些年&#xff0c;面向GIS的应用如雨后…

pytorch如何使用Focal Loss

Focal loss 是 文章 Focal Loss for Dense Object Detection 中提出对简单样本的进行decay的一种损失函数。是对标准的Cross Entropy Loss 的一种改进。 FL对于简单样本&#xff08;p比较大&#xff09;回应较小的loss。 如论文中的图1&#xff0c; 在p0.6时&#xff0c; 标准的…

nginx反向代理 负载均衡

目录 1.反向代理介绍&#xff1a; 2.七层代理和四层代理&#xff1a; 2.1 七层代理&#xff1a; 2.2 四层代理&#xff1a; 3.反向代理web服务器&#xff1a; 3.1 代理服务器配置&#xff1a; 3.2 服务器配置 &#xff1a; 3.3 客户端访问&#xff1a; 3.4 代理不同端口&am…

使用nps实现内网穿透

1、介绍 ​ 当我们想把内网的一些资源暴露在公网上时&#xff0c;可以使用内网穿透功能。比如公司的内网服务器&#xff0c;部署了平时需要开发的项目&#xff0c;但是回到家中无法访问&#xff0c;就可以使用内网穿透&#xff0c;将公司内网的接口映射到一台公网的服务器上&a…

C++之std::search应用实例(一百八十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

typescript的~~和双感叹号符号使用

&#xff08;标题不给用“!”&#xff09; "~~"符号使用 1.对于number类型的值&#xff0c;~~是取整作用 const num: number 3.14; const roundedNum: number ~~num; // 3 2.对于boolean类型的值&#xff0c;~ ~ true还是true&#xff0c;false还是false “!!”…

6.(Python数模)游泳接力指派问题

Python解决游泳接力指派问题 该问题也属于一个线性规划问题 源代码 import pulp # 导入 pulp 库 import numpy as np# 主程序 def main():# 问题建模&#xff1a;"""决策变量&#xff1a;x(i,j) 0, 第 i 个人不游第 j 种姿势x(i,j) 1, 第 i 个人游第 …

javaee spring 静态代理

静态代理 package com.test.staticProxy;public interface IUsersService {public void insert(); }package com.test.staticProxy;//目标类 public class UsersService implements IUsersService {Overridepublic void insert() {System.out.println("添加用户");…

A. Increasing and Decreasing

题目&#xff1a;样例&#xff1a; 输入 3 1 4 3 1 3 3 100 200 4输出 1 3 4 -1 100 150 180 200 思路&#xff1a; 思维题&#xff0c;这里我们看一下规律&#xff0c;我们已知a(1)&#xff0c;a(n) &#xff0c;又因为 数列b 应该是递减的&#xff0c;而观察规律可知 &#x…

无涯教程-Android - Spinner函数

Spinner允许您从下拉菜单中选择一个项目 例如。使用Gmail应用程序时,将显示如下所示的下拉菜单,您需要从下拉菜单中选择一个项目。 Spinner Example 示例 本示例演示计算机的类别,您需要从类别中选择一个类别。 以下是修改后的主要Activity文件src/com.example.spinner/Andr…

opencv-人脸识别

对https://blog.csdn.net/weixin_46291251/article/details/117996591这哥们代码的一些修改 import cv2 import numpy as np import os import shutil import threading import tkinter as tk from PIL import Image, ImageTkchoice 0# 首先读取config文件&#xff0c;第一行…

postman-使用Postman的模拟服务来模拟(mock)后端数据,完成前端模拟API调用

最近项目上比较忙&#xff0c;任务多时间紧&#xff0c;导致后端开发任务繁多&#xff0c;无法及时开发完毕&#xff0c;但是前端同学已经把对应功能开发完成&#xff0c;需要进行前后端联调来验证API及一些交互问题&#xff1b;这不能因为后端的进度来影响前端的工作完成情况&…

python爬虫-Selenium

一、Selenium简介 Selenium是一个用于Web应用程序测试的工具&#xff0c;Selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。模拟浏览器功能&#xff0c;自动执行网页中的js代码&#xff0c;实现动态加载。 二、环境配置 1、查看本机电脑谷歌浏览器的版…

【设备树笔记整理7】实践操作

1 使用设备树给DM9000网卡_触摸屏指定中断 1.1 修改方法 根据设备节点的compatible属性&#xff0c;在驱动程序中构造/注册 platform_driver&#xff0c;在 platform_driver 的 probe 函数中获得中断资源。 1.2 实验方法 以下是修改好的代码&#xff1a;第6课第1节_网卡_触摸…

PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化实践技术应用

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

WEBGL(3):鼠标动态绘制点

1 实现思路 绘制单个点鼠标事件监听点击事件将点推送到数组中绘制数组中所有点 2 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge&…