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

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


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


可以看一下在中文环境下 IK 分词器的正确使用方法:

 

l 目标文档 "新年快乐,万事如意"。

l 使用 ”快乐,万事“ 这个组合词项去查询命中目标文档。

 

# 准备测试数据
PUT match_phrase
POST match_phrase/_mapping
{
  "properties": {
    "ik-smart": {
      "type": "text",
      "analyzer": "ik_smart"
    },
    "ik-max": {
      "type": "text",
      "analyzer": "ik_max_word"
    }
  }
}
POST match_phrase/_doc/1
{
  "ik-smart": "新年快乐,万事如意",
  "ik-max": "新年快乐,万事如意"
}
在这里 "新年快乐,万事如意" 这句话会被 IK 两个分词器 ik_max_word 和 ik_smart 索引。其具体效果如下:
# ik_smart 分词器
POST _analyze
{
  "analyzer": "ik_smart",
  "text": "新年快乐,万事如意"
}
# 返回结果
{
  "tokens" : [
    {
      "token" : "新年快乐",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "万事如意",
      "start_offset" : 5,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 1
    }
  ]
}
很明显,在 ik_smart 的分词器作用下,词项中并没有单独的“快乐”和“万事”两个词项,因此搜索“ 快乐,万事”时没有结果的。
那看看 ik_max_word 的情况:
# ik_max_word 分词器
POST _analyze
{
  "analyzer": "ik_max_word",
  "text": "新年快乐,万事如意"
}
# 返回结果
{
  "tokens" : [
    {
      "token" : "新年快乐",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "新年",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "快乐",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "万事如意",
      "start_offset" : 5,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "万事",
      "start_offset" : 5,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "万",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "TYPE_CNUM",
      "position" : 5
    },
    {
      "token" : "事",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "CN_CHAR",
      "position" : 6
    },
    {
      "token" : "如意",
      "start_offset" : 7,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 7
    }
  ]
}

可以看到这次产生了“快乐”和“万事”两个词项,但是两者的 position 之差为 2 ,因此想要搜索命中文档,需要设置 slop 为 1 。

因此正确的查询方式如下:

GET match_phrase/_search
{
  "query": {
    "match_phrase": {
      "ik-max": {
        "query": "快乐,万事",
        "slop": 1
      }
    }
  }
}

 

4.4 match_phrase_prefix

 

match_phrase_prefix 查询会将被查询的内容进行分词后进行 match_phrase 查询,其中最后一个词项在做词项比对的时候是 prefix 查询。

 

比如下面三个文档:

 

l quick brown fox

l two quick brown ferrets

l the fox is quick and brown

 

进行下面的查询:

 

GET my-index-000001/_search
{
  "query": {
    "match_phrase_prefix": {
      "message": {
        "query": "quick brown f"
      }
    }
  }
}

则能正常返回前两个文档。



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

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
关系型数据库 MySQL Linux
CentOS7离线安装MySQL5.7
CentOS7.7离线安装tar包形式的MySQL5.7.33
1483 2
CentOS7离线安装MySQL5.7
|
10月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
285 7
|
网络协议 Unix Linux
Linux 下 socket 编程介绍
Linux 下 socket 编程介绍
158 0
|
计算机视觉 Python
Opencv播放视频文件、将视频转换为灰度视频实战(附Python源码)
Opencv播放视频文件、将视频转换为灰度视频实战(附Python源码)
512 0
|
Linux
35. 【Linux教程】Linux 修改用户组
35. 【Linux教程】Linux 修改用户组
239 0
|
弹性计算 Linux 开发工具
2023年阿里云学生服务器配置及免费学生机领取攻略
2023年阿里云学生服务器配置及免费学生机领取攻略,阿里云学生服务器优惠活动:高效计划,可以免费领取一台阿里云服务器,如果你是一名高校学生,想搭建一个linux学习环境、git代码托管服务器,或者创建个人博客网站记录自己的学习成长历程,拥有一台云服务器是很有必要的。阿里云的飞天加速计划3.0——高校计划,面向学生开发者提供免费的云服务器福利,通过学生身份认证及续费任务后,最多可领取7个月免费云服务器ECS资源
1115 0
|
前端开发 定位技术 数据格式
GeoServer使用CSS渲染地图
CSS Style是GeoServer的一个扩展插件,使用CSS写起来的地图渲染策略文件相比较SLD而言,非常的简洁,本文根据GeoServer用户手册,稍微改写,便于该知识点的推广。
1469 0
|
供应链 前端开发 BI
基于Python+Django实现药品管理系统
基于Python+Django实现药品管理系统
737 1
基于Python+Django实现药品管理系统
|
Linux
CentOS 7 下编译安装 4.14 内核
CentOS 7 下编译安装 4.14 内核
476 1
CentOS 7 下编译安装 4.14 内核
|
存储 自然语言处理 索引
es keyword和text的区别以及联想词实现方案
es keyword和text的区别以及联想词实现方案
485 0