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

简介: 带你读《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并实现搜索。  
相关文章
|
3月前
|
机器学习/深度学习 人工智能 程序员
Reflexion:让AI智能体学会反思的神奇技术
想象一下AI智能体能像人类一样从错误中学习,Reflexion技术让智能体不再需要重新训练就能自我改进。本文通过一个智能体助手小R的成长故事,带你轻松理解这个改变智能体学习方式的创新技术。
|
7月前
|
SQL 关系型数据库 MySQL
客户说|保险极客引入阿里云AnalyticDB,多业务场景效率大幅提升
“通过引入AnalyticDB,我们在复杂数据查询和实时同步方面取得了显著突破,其分布式、弹性与云计算的优势得以充分体现,帮助企业快速响应业务变化,实现降本增效。AnalyticDB的卓越表现保障了保险极客数据服务的品质和效率。”
|
12月前
|
缓存 监控 NoSQL
Redis经典问题:缓存穿透
本文详细探讨了分布式系统和缓存应用中的经典问题——缓存穿透。缓存穿透是指用户请求的数据在缓存和数据库中都不存在,导致大量请求直接落到数据库上,可能引发数据库崩溃或性能下降。文章介绍了几种有效的解决方案,包括接口层增加校验、缓存空值、使用布隆过滤器、优化数据库查询以及加强监控报警机制。通过这些方法,可以有效缓解缓存穿透对系统的影响,提升系统的稳定性和性能。
|
数据采集 安全 网络安全
阿里云云效产品使用问题之流水线的环境可以在什么地方进行配置
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
前端开发 定位技术 数据格式
GeoServer使用CSS渲染地图
CSS Style是GeoServer的一个扩展插件,使用CSS写起来的地图渲染策略文件相比较SLD而言,非常的简洁,本文根据GeoServer用户手册,稍微改写,便于该知识点的推广。
1550 0
|
供应链 前端开发 BI
基于Python+Django实现药品管理系统
基于Python+Django实现药品管理系统
784 1
基于Python+Django实现药品管理系统
|
Linux
CentOS 7 下编译安装 4.14 内核
CentOS 7 下编译安装 4.14 内核
596 1
CentOS 7 下编译安装 4.14 内核
|
存储 自然语言处理 索引
es keyword和text的区别以及联想词实现方案
es keyword和text的区别以及联想词实现方案
532 0
|
弹性计算 数据库 Windows
Windows10操作系统配置NTP方法
Windows10操作系统配置NTP方法
Windows10操作系统配置NTP方法
|
达摩院 API 开发工具
阿里云视觉智能开放平台人脸人体API Net SDK Quick Start
阿里云视觉智能开放平台基于达摩院自研的人脸人体分析技术,提供人脸检测与五官定位、人脸属性识别、人脸比对、人脸搜索、人体检测、人体属性、行为分析等多种功能,为开发者和企业用户提供高性能高可用的人脸人体识别服务。广泛应用于数字门店、楼宇门禁、身份识别、互动娱乐、IPC摄像头、内容广告等领域。本文介绍人脸比对CompareFace的NET SDK使用示例。
994 0
阿里云视觉智能开放平台人脸人体API Net SDK Quick Start

热门文章

最新文章