带你读《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并实现搜索。  
相关文章
|
安全 Java Nacos
nacos常见问题之反序列化漏洞如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
1211 1
|
敏捷开发 设计模式 测试技术
TDD简介
TDD简介
459 0
|
机器学习/深度学习 人工智能 算法
展望2024: 中国AI算力能否引爆高性能计算和大模型训练的新革命?
2023年是人工智能发展的重要转折年,企业正在从业务数字化迈向业务智能化。大模型的突破和生成式人工智能的兴起为企业实现产品和流程的革新提供了先进工具,引领产业迈入智能创新的新阶段。在这个新时代,企业不再仅关注如何增强智能化能力,而更加注重如何利用人工智能实现产品和流程的革新。
3630 0
|
关系型数据库 MySQL Linux
CentOS7离线安装MySQL5.7
CentOS7.7离线安装tar包形式的MySQL5.7.33
CentOS7离线安装MySQL5.7
|
测试技术
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
本文是关于自动化测试项目实战笔记,主要介绍了如何测试用户注册功能,包括验证码错误、注册成功以及弹框处理的测试步骤和代码实现。
548 2
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
610 7
|
SQL 数据库 索引
SQL CREATE INDEX
【11月更文挑战第16天】
804 3
|
存储 网络协议 算法
OSPF基本概念解析:从零开始理解
OSPF基本概念解析:从零开始理解
756 0
|
Java API 开发工具
如何通过淘宝商品详情接口实现商品 SKU、优惠价、价格等参数的实时更新?
要合法获取淘宝商品详情数据,首先需通过淘宝开放平台注册开发者账号并获得App Key与App Secret。接着根据业务需求申请对应的商品详情数据接口权限,并通过官方文档了解接口详情。获取访问令牌后,按照文档构建请求URL并附加必要参数及令牌以调用接口。此外,考虑使用淘宝提供的SDK简化开发流程,如Python SDK等。体验API:b.mrw.so/2Pv6Qu。
1003 2
|
缓存 监控 网络协议
DNS缓存中毒原理
【8月更文挑战第17天】
520 1

热门文章

最新文章