Elasticsearch学习--查询(prefix、wildcard、regexp、fuzzy)

article/2025/10/23 16:02:38

一、前缀搜索 prefix

  • 不计算相关度评分
  • 性能较差
  • 前缀搜索匹配的是分词后的词项
  • 前缀搜索没有缓存
  • 前缀搜索尽可能把前缀长度设置的更长
GET product/_search
{"query": {"fuzzy": {"name": {"value": "product1"}}}
}

index_prefixes为词项创建倒排索引,

比如computer这个单词,本身是一个词项,index_prefixes可以为这个单词再创建倒排索引,min_chars=2,max_chars=5的话,创建的索引:co、com、comp、compu

PUT prefixindex
{"mappings": {"properties": {"name": {"type": "text","analyzer": "ik_max_word","index_prefixes": {"min_chars": 2,"max_chars": 3}}}}
}

优缺点:

优点:加快前缀索引的搜索效率

缺点:占用内存、空间

二、通配符 wildcard

匹配的也是分词后的词项term

# 造数据
PUT testindex/_doc/1
{"name":"zhang san"
}PUT testindex/_doc/2
{"name":"zhang si"
}PUT testindex/_doc/3
{"name":"zhuang san"
}PUT testindex/_doc/4
{"name":"zhuang si"
}
# 用法
GET testindex/_search
{"query": {"wildcard": {"name": {"value": "*san"}}}
}

* 数组中的每个值都是精准值

 三、正则 regexp

1. 用法

GET testindex/_search
{"query": {"regexp": {"name": ".*san"}}
}

2. flags参数含义

 四、模糊查询 fuzzy

1. 情况

1)混淆字符(box->fox)

2) 缺少字符(black->lack)

3) 多出字符(sic -> sick

4) 颠倒次序(act-> cat)

2. 用法

GET testindex/_search
{"query": {"fuzzy": {"name": "xiaolahu"}}
}

 3. 参数

编辑距离:把字符改成正确的,需要挪到的次数

GET testindex/_search
{"query": {"fuzzy": {"name": {"value": "xiaoloahu","fuzziness": 1,"transpositions":false}}}
}

 fuzziness, 默认是auto,根据字符串长度,从0,1,2取值

 4. match查询也支持fuzziness

GET testindex/_search
{"query": {"match": {"name": {"query":"xiaoloahu","fuzziness": 1}}}
}

 match是分词的,fuzzy是不分词的

fuzzy不适合数据量大时使用

五、match_phrase_prefix

match_phrase

match_phrase会分词

被检索字段必须包含match_phrase中的所有词项并且顺序必须是相同的

被检索字段包含的match_phrase中的词项之间不能有其他词项

match_phrase_prefix概念

match_phrase_prefix与match_phrase相似,但是它多了一个特性,就是它允许在文本的最后一个词项(term)上的前缀匹配

如果是一个单词,比如a,它会匹配文档字段所有以a开头的文档

如果是一个短语,比如 "this is ma" ,他会先在倒排索引中做以ma做前缀搜索,然后在匹配到的doc中做match_phrase查询

参数

max_expansions:限制匹配的最大词项,默认50;越大越消耗性能,可以通过减少这个值,提高性能

analyzer:指定何种分析器来对该短语进行分词处理

boost :用于设置该查询的权重

slop :允许短语间的词项(term)间隔

slop 参数告诉 match_phrase 查询词条相隔多远时仍然能将文档视为匹配

什么是相隔多远? 意思是说为了让查询和文档匹配你需要移动词条多少次

六、N-gram和edge ngram

ngram可以用于切词器(比分词器粒度更小)

GET _analyze
{"tokenizer": "ngram","text": "reba always loves me"
}

有两个主要参数

min_gram:创建索引所拆分字符的最小阈值

max_gram:创建索引所拆分字符的最大阈值

ngram也可以用于词项过滤器token filter

GET _analyze
{"tokenizer": "ik_max_word","filter": [ "ngram" ],"text": "reba always loves me"
}

优点:做模糊搜索时,粒度更细

缺点:占用大量的磁盘空间

Edge n-gream

ngram适用于前缀、中缀、后缀搜索

Edge n-gream只适用于前缀搜索,但也会更节省空间

Edge n-gream的性能比match_phrase_prefix更高


http://chatgpt.dhexx.cn/article/C4ON0cEH.shtml

相关文章

bgp 使用route-map设置Local perference(本地优先属性)配置与详解

实验目的: 1、掌握基于route-map的本地优先配置方法。 2、使用route-map配置可以定置基于目标网络的本地优先。 实验拓扑: 接口IP配置及bgp基础配置详见 CSDNhttps://mp.csdn.net/mp_blog/creation/editor?spm1001.2014.3001.5352 查看R3与R4的路由…

使用route-map 配置BGP本地优先级

一、实验目的: 1、掌握基于route-map的本地优先配置方法。 2、使用route-map配置可以定置基于目标网络的本地优先级。 二、拓扑图: 三、配置BGP基本的配置: 1、配置各路由器的IP地址和BGP协议。配置完之后,查看一下R3和R4的路由表…

Cisco route-map 源地址路由配置

拓朴图: 案例: 公司内部使用的是一条拨号光纤和一条固定专线光纤,默认是指向拨号光纤出口那个网关出去,现在2网段有两台服务器(WEB、Mail)映射到公网,让外部来访问。 办公区因工作需要&#xf…

bgp route-map应用 配置 学习笔记

先全运行bgp R2 router bgp 2 no auto-summary no synchronzation bgp router-id 2.2.2.2 neighbor 12.1.1.1 remtotes as 10 neighbor 24.1.1.4 remote-as 10r1: router bgp 10 no auto-summary no synchronization bgp router-id 1.1.1.1 neighbor 12.1.1.2…

重分布和Route-MAP

一般在做重分布的时候用route-map较多,当然也可以用分发列表或者前缀列表等等,重分布的时候为了干掉不需要的路由,节约路由器CPU和转发效率可以使用route-map,当然route-map也可以用在其他的场景。 本次实验将ospf与rip重分布来使…

使用Route-Map过滤BGP的路由

实验目的 1、掌握使用Route-Map过滤BGP的路由。 实验拓扑 接口ip配置与bgp基础配置详见: CSDNhttps://mp.csdn.net/mp_blog/creation/editor/125210020查看R3的路由表: R3#show ip route Gateway of last resort is not set1.0.0.0/24 is subnetted…

基于Route-map的路由过滤配置详解

实验目的: 1、掌握基于Route-map的路由过滤配置方法。 2、掌握route-map的命令语法。 实验拓扑: 步骤1:接口ip配置路由协议基础配置重分发详见CSDNhttps://mp.csdn.net/mp_blog/creation/editor/125018583查看R1、R3路由表 R1#show ip route Gateway …

带你轻轻松松了解route-map

一、Route-map概述 1.技术背景 首先来初步认识一下route-map。看上图,我们在R2上,将OSPF路由重发布进RIP,前面已经说过了,在重发布时,可以使用metric关键字来设置路由被重发布进RIP后的metric,这里设置为…

Route-Map个人理解及实验解析

Route-Map:功能性非常强的策略列表,可以用来过滤路由也可以调整路由的属性,自身具备过滤功能。 Route-Map的作用: 1.在重发布的过程中做route-map,重发布过程中可以改变路由的属性;(次要作用) 2.PBR 策略路…

Route map应用策略路由(上)

一、拓扑图: 二、配置说明: 1、根据拓扑图的配置,R4上面跑OSPF,下面走静态路由,R5和R6走默认路由上去。但是要注意的一点是R4上要加一条命令:default-information originate always (向OSPF区域通知一条默认…

CISCO ROUTE-MAP

强制指定源地址的下一跳 match定义匹配条件 match ip address匹配访问列表或前缀列表 match interface匹配下一跳出接口为指定接口之一的路由 match ip next-hop匹配下一跳地址为特定访问列表中被允许的那些路由 match metric匹配具有指定度量值的路由 match route-type匹…

Route-map扩展(讲解+配置)

目录 ——Route-map扩展一般形式: ——案列(1): ——案列(2): ——Route-map扩展一般形式: Ip policy-list aaa per/denyMatch …………(前缀列表/ACL....&#xff…

路由策略route-map

路由策略 route-map 定义 route-map,路由图,用于实现路由策略。 功能 部署 route-map NM permit 10 match ip address 1 2 match ip address 1 match ip address 2 match interface f0/0 f1/0 route-map NM deny 20 match ip address 2 set weight …

route-map的使用介绍

一、关于route-map route map可用于路由的再发布和策略路由,还经常使用在BGP中。策略路由实际上是复杂的静态路由,静态路由是基于数据包的目标地址并转发到指定的下一跳路由器,策略路由还利用和扩展IP ACL链接,以便提供更多功能的…

011mmap进程通信

LINUX学习笔记 mmap 进程通信1. mmap 函数声明及头文件包含1.1 参数说明1.2 mmap 通信demo 2. mmap 注意事项:2.1 mmap 函数的保险使用方法: 3. demo 父子进程间mmap通信4. demo 非血缘关系进程间mmap通信5. mmap通信与fifo和文件通信的差异6. 匿名映射(…

Linux mmap内存映射

一、什么是mmap mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系,函数原型如下 void *mmap(void *addr, size_t length, int prot, int flags,…

Linux下mmap

目录 一.mmap简介 二.为什么需要使用mmap 三.mmap的使用 四.mmap原理 一.mmap简介 什么是mmap了?从名字上来看是memory map也就是地址映射,是一种内存映射文件的方法。mmap是一个可以将一个文件或者其它对象映射到进程的地址空间实现磁盘的地址和进程虚…

Android 进程间通信机制(二) mmap 原理

一. 前言 Binder中一次拷贝的实现就是利用mmap(memory mapping)内存映射机制,我们来看看它的工作原理. 二. 参考文章 下面这几篇文章建议先好好阅读一下,都是总结的很好的文章, 每个人理解可能不一样 笔者也是看了好多博客文章和B站视频讲解, 然后加上自己的理解后 输出的一…

Linux mmap讲解

0 引言 Linux 提供了非常强大的 mmap(2) 系统调用; 它使开发人员能够将任何内容直接映射到进程虚拟地址空间 (VAS)。 此内容包括文件数据、硬件设备(适配器)内存区域,或只是通用内存区域。 在本文中,我们将只关注使用…