带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(8)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(8)


《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(7) https://developer.aliyun.com/article/1229936



3.7 prefix

 

Prefix 查询用于对某一字段查询特定开头的词项。

 

使用方法:


# 创建测试数据
PUT my-index-000001/
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "user.id": {
        "type": "keyword"
      }
    }
  }
}
PUT my-index-000001/_doc/21
{"user.id":"kind"}
PUT my-index-000001/_doc/22
{"user.id":"kimy"}
PUT my-index-000001/_doc/23
{"user.id":"ki1212121"}
# 进行查询
GET my-index-000001/_search
{
  "query": {
    "prefix": {
      "user.id": {
        "value": "ki"
      }
    }
  }
}


这里代表查询 user.id 字段词项符合 ki 开头的文档。

 

注意:

 

l 加速查询:可以在创建 mapping 时使用 index_prefixes 参数加速前缀查询。如果启用,

l ES 将索引前缀在 2 到 5 个字符到一个单独的字段。这让 ES 以更大的索引为代价更有效地运行前缀查询。

l 需要打开 search.allow_expensive_queries 设置

 

3.8 regexp

 

Regexp 查询是使用正则表达式进行匹配的查询方式。

 关于正则匹配支持的操作,可以见相关详细列表:https://www.elastic.co/guide/en/elasticsearch/reference/7.14/regexp-syntax.html

 

使用方法:


GET term-query/_search
{
  "query": {
    "regexp": {
      "user.id": {
        "value": "k.*y",
        "flags": "ALL",
        "case_insensitive": true,
        "max_determinized_states": 10000,
      }
    }
  }
}

以上查询代表使用正则表达式 "k.*y" 去匹配相关符合条件的文档。

 

相关参数:

 

l flags:为正则表达式启用可选操作符。

l case_insensitive:当设置为 true 时,允许正则表达式值与索引字段值进行不区分大小写的匹配。默认值为 false,这意味着匹配的大小写敏感性取决于底层字段的映射。

l max_determinized_states:查询所需的匹配词项的最大数目。默认是 10000。 ES 在内部使用 Apache Lucene 解析正则表达式。 Lucene 将每个正则表达式转换为包含若干确定状态的有限词项。可以使用此参数防止转换无意中消耗过多资源。为了运行复杂的正则表达式,需要增加这个限制。

 

3.9 ids
Ids 查询是直接查询 _id 字段的一种较为便捷的查询方式。
使用方法:
GET /_search
{
  "query": {
    "ids" : {
      "values" : ["1", "4", "100"]
    }
  }
}

3.10 exists

 

Exists 查询用于查询一个字段内容是否为空,若不为空则返回。Exists 可以与 must_not 布尔查询一起使用查找字段没有值的文档。

 

由于下列原因,文档字段值可能不存在:

 

1、源 JSON 中的字段为 null 或 []

2、该字段在mapping中有 index:false 设置

3、字段值的长度超过了映射中的 ignore_above 设置

4、该字段值是畸形的,并且在 mapping 中定义了 ignore_malformed

 

使用方法:

GET term-query/_search
{
 "query": {
    "exists": {
      "field": "user.id"
    }
  }
}

注意:当出现下列情况时,字段还是存在的:

 

1、空字符串,如" "或"-"

2、包含 null 和另一个值的数组,例如 [ null, "foo"]

3、在字段 mapping 中定义的自定义空值


《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(9) https://developer.aliyun.com/article/1229932

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
ArkTS基础——Component自定义组件——【坚果派——红目香薰】
ArkTS基础——Component自定义组件——【坚果派——红目香薰】
280 0
|
6月前
|
缓存 NoSQL Java
Redis应用—6.热key探测设计与实践
热key问题在高并发系统中可能导致数据层和服务层的严重瓶颈,如Redis集群瘫痪和用户体验下降。为解决此问题,京东开发了JdHotkey热key探测框架,具备实时性、准确性、集群一致性和高性能等特点。该框架由etcd集群、Client端jar包、Worker端集群和Dashboard控制台组成,通过分布式计算快速识别热key并推送至应用内存,有效减轻数据层负载,提升服务性能。JdHotkey适用于多种场景,安装部署简便,支持毫秒级热key探测和集群一致性维护。
294 61
Redis应用—6.热key探测设计与实践
|
存储 Kubernetes 负载均衡
k8s详解
@[TOC](目录) Kubernetes(简称 k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。本篇详解将介绍 k8s 的核心概念、架构和使用方法,帮助读者深入理解 k8s 并掌握其基本操作。 # 一、k8s 核心概念 1.1 容器 容器是一种轻量级、可移植的虚拟化技术,用于打包和运行应用程序。容器可以共享主机操作系统的内核,从而提高部署效率和资源利用率。常见的容器技术包括 Docker、Kubernetes Pod、LXC 等。 1.2 Namespace Namespace 是 k8s 中的资源隔离单元,用于对 k8s 对象进行命名空间隔离。通过创建 Name
708 0
|
11月前
|
XML Java Maven
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
194 7
|
Arthas 监控 Java
金石原创 |【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康!
金石原创 |【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康!
291 0
|
机器学习/深度学习 自然语言处理 异构计算
完全小白的pycharm深度学习调试+for循环断点条件设置
完全小白的pycharm深度学习调试+for循环断点条件设置
750 1
|
JavaScript 内存技术
vue悬浮框自由移动+录音功能
vue悬浮框自由移动+录音功能
vue悬浮框自由移动+录音功能
|
关系型数据库 MySQL 数据库
mysql:Windows修改MySQL数据库密码(修改或忘记密码)
mysql:Windows修改MySQL数据库密码(修改或忘记密码)
1638 0
mysql:Windows修改MySQL数据库密码(修改或忘记密码)
|
Java 缓存 测试技术
Groovy&Java动态编译执行
Groovy&Java动态编译执行 工作中,遇到部分业务经常动态变化,或者在不发布系统的前提下,对业务规则进行调整。那么可以将这部分业务逻辑改写成Groovy脚本来执行,那么就可以在业务运行过程中动态更改业务规则,达到快速响应。
2096 0
|
Arthas 存储 运维
60-微服务技术栈(高级):在线检测工具Arthas(实现CPU排查与代码热更新)
线上代码经常会出现CPU占用过高的情况,按以往经验我会使用top指令,进一步借助于jstack去查看具体信息从而进行问题排查,但基本上都逃不过需要重新发包的局面,即使是一个增量包,应用也需要短暂停启。后来运维大兄弟让我试一下Arthas,说是可以进行代码的热更新操作,正好来试一下。
543 0