tnblog
首页
视频
资源
登录

Elasticsearch URL Search详解

7445人阅读 2020/9/12 21:17 总访问:3663764 评论:0 收藏:1 手机
分类: 云产品

elasticsearch

Elasticsearch URL Search详解

通过 URL Query 实现搜索

举例:

  1. Get /movies/_search?q=2020&df=title&sort=year:desc&from=O&size=10&timeout=1s
  2. {
  3. "profile":true
  4. }
参数 意义
q 指定查询语句,使用 Query String Syntax。
df 默认字段,不指定时,会对所有字段进行查询
Sort 排序 / from 和 size 用于分页
Profile 可以查看查询是如何被执行的

这里我们定义三条测试数据:

指定字段 v.s 泛查询

这里我们通过指定user字段为bob进行查询

  1. #指定字段的查询
  2. GET /users/_search?q=Bob&df=user
  3. {
  4. "profile": "true"
  5. }
  6. GET /users/_search?q=user:Bob
  7. {
  8. "profile": "true"
  9. }

接着在下面我们可以看到,它是通过TermQuery类型来进行查询的,查询时的查询格式为user:bob

这里我们把trying作为查询泛查询的查询参数

  1. #泛查询
  2. GET /users/_search?q=trying
  3. {
  4. "profile": "true"
  5. }

接着在下面我们可以看到,它是通过DisjunctionMaxQuery类型来进行查询的,查询时的查询格式如下图所示;我们发现泛查询的查询格式有很多,同时当在数据量大的时候也会影响 Elasticsearch 的效率

Term v.s Phrase

举例:

Term类型:Good Morning 等同于 Good 或(or) Morning
Phrase类型:”Good Morning” 等同于 Good 与(And) Morning。Phrase查询,还要求前后顺序保持一致

Term类型

  1. #使用引号,Phrase查询
  2. GET /users/_search?q=message:out elasticsearch
  3. {
  4. "profile": "true"
  5. }

查询出2条数据,但是我们发现它不仅仅通过TermQuery类型查询指定的字段进行查询,还通过了DisjunctionMaxQuery类型对所有的字段进行所有查询

这里呢我们可以直接通过Bool进行查询

  1. GET /users/_search?q=message:(out elasticsearch)
  2. {
  3. "profile": "true"
  4. }

PhraseQuery类型

  1. #使用引号,Phrase查询
  2. GET /users/_search?q=message:"out elasticsearch"
  3. {
  4. "profile": "true"
  5. }

如下图所示查询出两条数据,这里并且其中还为区分大小写。接着我们再通过调换一下顺序看看能否获取到?

获取到0条数据由此可以证明:Phrase查询,还要求前后顺序保持一致

Query String Syntax

  • 布尔操作
    • AND / OR / NOT 或者 && / || / !
      • 必须大写
      • title:(matrix Not reloaded)
  • 分组
    • +表示 must
    • -表示 must_not
    • title:(+matrix -reloaded)

当我们需要message中既要有out又要有elasticsearch,我们就可以以And举例

  1. GET /users/_search?q=message:(out AND elasticsearch)
  2. {
  3. "profile": "true"
  4. }

当我们需要有out但不需要elasticsearch的时候,我们可以以Not举例

  1. GET /users/_search?q=message:(out NOT elasticsearch)
  2. {
  3. "profile": "true"
  4. }

当我们需要必要的参数时,结果同第一种查询结果一样。%2B表示+号,本句中必须要有的,是否包含out不一定。

  1. GET /users/_search?q=message:(out NOT %2Belasticsearch)
  2. {
  3. "profile": "true"
  4. }

当然除此之外还有范围查询以及算术查询

Query String Syntax(算术与范围)

  • 范围查询
    • 区间表示:[]闭区间,{}开区间
      • year:{2019 TO 2018}
      • year:[* TO 2018]
  • 算数符号
    • year:>2010
    • year:(>2010 && <=2018)
    • year:(+>2010 +<=2018)
  1. #范围查询 ,区间写法
  2. GET /movies/_search?q=title:beautiful AND year:[2002 TO 2018]
  3. {
  4. "profile":"true"
  5. }

Query String Syntax(通配符查询,正则表达式,模糊匹配与近似查询)

  • 通配符查询(通配符查询效率低,占用内存大,不建议使用。特别是放在最前面)
    • ? 代表 1 个字符,* 代表 0 或多个字符
      • title:mi?d
      • title:be*
  • 正则表达式
    • title:[bt]
  • 模糊匹配与近似查询
    • title:befutifl~1
    • title:”lord rings”~2
  1. #通配符查询
  2. GET /movies/_search?q=title:b*
  3. {
  4. "profile":"true"
  5. }
  6. //模糊匹配&近似度匹配
  7. GET /movies/_search?q=title:beautifl~1
  8. {
  9. "profile":"true"
  10. }
  11. GET /movies/_search?q=title:"Lord Rings"~2
  12. {
  13. "profile":"true"
  14. }

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

JAVA8 十大新特性详解

前言: Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级。在Java Code Geeks上已经有很多介绍Java 8新特...

HBuilder打包apk文件详解

自己写app小软件,打包成apk是非常有成就感的一件事,今天就讲一下如何利用HBuilder把app项目打包成apk,很简单。1、 在Hbu...

使用swagger创建webapi文档描述---详解

在前后端分离开发中,作为后端如何给前端提供有效直观的接口文档呢?没错,就是使用swagger 俗称“丝袜哥”教程:一、首先...

k8s详解基本对象

k8s详解基本对象[TOC] 参考yaml代码如下apiVersion: apps/v1 kind: Deployment metadata: name: k8s-demo names...

C WebApi 接口传参详解

这篇文章主要介绍了C# WebApi 接口传参详解,本篇打算通过get、post、put、delete四种请求方式分别谈谈基础类型(包括int/s...

Asp.net core webapi部署IIS过程详解,以及坑点介绍和解决坑点方法

这几天做了一个Asp.net core 3.0的webapi小练习,只有简单的增删改查,做好了以后又去对应的部署IIS,因为之前也发布过一些...

SVN与TortoiseSVN实战:文件加锁详解

本篇详解使用TortoiseSVN对文件进行加锁和解锁的技巧加锁与解锁的操作对于项目中的二进制文件,如图片、声音、动态库等不可...

.NET CORE EF数据库迁移,以及迁移命令详解。code first。在不删除表的情况下保持同步

.NET CORE EF 数据库迁移需要的依赖Install-Package Microsoft.EntityFrameworkCore.SqlServer -version 3.1.1 Install-Pa...

Ansible Role详解

Ansible Role详解[TOC] RolesRoles介绍ansible自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据...

JDBC功能类详解 3

对JDBC不熟悉的建议和JDBC入门 2篇对照看一、DriverManager1、注册驱动2、获取数据库链接二、Connection三、Statement四、R...

FreeSql使用详解

FreeSql 主要对于数据库的增删改查操作,本身不难,难的是入门,本章主要讲解对于Freesql的入门配置本章讲解所需工具:MySQ...

MySQL事务详解,事务并发冲突,事务隔离级别

[TOC]事务的概念事务:把所有的操作当中一个整体,要么全部成功,要么全部失败 一旦开启了事务所有的操作都是临时的,你可...

kubeadm init 参数详解k8s init 参数详解k8s 初始化参数详解

--apiserver-advertise-address string 设置 apiserver 绑定的 IP. --apiserver-bind-port int32 设置...

JAVA多线程系列--ForkJoinPool详解

https://blog.csdn.net/niyuelin1990/article/details/78658251https://blog.csdn.net/dhaibo1986/article/details/1087373...

Vue--Vuex 中 Modules 详解

前言  在Vue中State使用是单一状态树结构,应该的所有的状态都放在state里面,如果项目比较复杂,那state是一个很大的对...
这一世以无限游戏为使命!
排名
5
文章
229
粉丝
15
评论
7
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术