当前位置: 首页 > news >正文

ElasticSearch之找到乔丹的空中大灌篮电影

写在前面

本文看一个搜索的实际例子,找到篮球之神乔丹的电影Space Jam,即空中大灌篮。

正式开始之前先来看下要查询的目标文档,以及查询的text:

  • 要查询的目标文档
{..."title": "Space Jam",..."overview": "Michael Jordan agrees to help the Looney Tunes play a basketball game against alien slavers to determine their freedom.",...
}
  • 查询的text
basketball with cartoon aliens

另,本文测试数据,从这里 下载。

1:实战

首先我们来准备数据:

  • kibana 执行:
DELETE tmdb/
PUT tmdb/
  • 在命令行执行
    注意进入到数据文件所在目录:
curl -H "Content-Type: application/json"  -XPOST "192.168.10.64:9210/tmdb/_bulk" --data-binary @javaio-appendfile1709014272558.json

查看是否成功:
在这里插入图片描述
接着来查询:

POST tmdb/_search
{"_source": ["title","overview"],"size":20,"query": {"multi_match": {"query": "basketball with cartoon aliens","fields": ["title^10","overview"]}},"highlight" : {"fields" : {"overview" : { "pre_tags" : ["<em>"], "post_tags" : ["</em>"] },"title" : { "pre_tags" : ["<em>"], "post_tags" : ["</em>"] }}}}

在这里插入图片描述
乔丹的电影并没有优先返回,这是因为在overview中包含basketbal和alien,但是查询语句是basketball with cartoon aliens,而字段默认的分词器是standard,在查询时,搜索的词项也会默认使用和所查询字段一样的分词器来生成词项数组,而standard分词器会将aliens生成词项aliens,所以是无法匹配overview中的alien,就导致无法目标文档,我们可以尝试将搜索条件改为basketball with cartoon alien来看下:

POST tmdb/_search
{"_source": ["title","overview"],"size":20,"query": {"multi_match": {"query": "basketball with cartoon alien","fields": ["title","overview"]}},"highlight" : {"fields" : {"overview" : { "pre_tags" : ["<em>"], "post_tags" : ["</em>"] },"title" : { "pre_tags" : ["<em>"], "post_tags" : ["</em>"] }}}}

有两处改动,一是将aliens改为alien来匹配overview中的alien,二是因为title不是查询的重点,所以将其权重删除,就能正常查询了:
在这里插入图片描述

在上面说了在查询时,搜索的词项也会默认使用和所查询字段一样的分词器来生成词项数组,所以我们可以将overview的分词器设置english分词器。如下:

DELETE tmdb/
PUT tmdb/
{"mappings": {"properties": {"overview": {"type": "text","analyzer": "english"}}}
}curl -H "Content-Type: application/json"  -XPOST "192.168.10.64:9210/tmdb/_bulk" --data-binary @javaio-appendfile1709014272558.json

再除去title的权重,但依然搜索aliens,看下:

POST tmdb/_search
{"_source": ["title","overview"],"size":20,"query": {"multi_match": {"query": "basketball with cartoon aliens","fields": ["title","overview"]}},"highlight" : {"fields" : {"overview" : { "pre_tags" : ["<em>"], "post_tags" : ["</em>"] },"title" : { "pre_tags" : ["<em>"], "post_tags" : ["</em>"] }}}}

在这里插入图片描述
依然可以正常查询。

从以上的例子可以看出,搜索引擎并不能一蹴而就,要根据用户的查询习惯,实际返回数据的准确度,正确的数据是否被返回,用户是否点击了最优先的数据等等信息,来动态的调整mapping以及分词器的信息。

写在后面

参考文章列表

ElasticSearch之单值多字段查询以及multi match 。

相关文章:

  • Android 接入指纹识别
  • 【QT+QGIS跨平台编译】之五十四:【QGIS_CORE跨平台编译】—【qgssqlstatementlexer.cpp生成】
  • 【Linux】部署前后端分离项目---(Nginx自启,负载均衡)
  • SpringMVC(2)
  • 如何在 CentOS 上安装 ONLYOFFICE 文档 8.0
  • MySQL集群 双主架构(配置命令)
  • Nginx 和 Apache 的比较
  • Python 鼠标模拟
  • 【电子通识】为什么单片机芯片上会有多组VDD电源?
  • ES-ES的基本概念
  • CSS3技巧37:JS+CSS3 制作旋转图片墙
  • 行为树入门:BehaviorTree.CPP Groot2练习(叶子节点)(2)
  • android.text.BoringLayout.isBoring 的 NullPointerException
  • 【C语言】学生宿舍信息管理系统
  • 开创5G无线新应用:笙科电子5.8GHz 射频芯片
  • (三)从jvm层面了解线程的启动和停止
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Hexo+码云+git快速搭建免费的静态Blog
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • text-decoration与color属性
  • vue 配置sass、scss全局变量
  • vue中实现单选
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端自动化解决方案
  • 深入浏览器事件循环的本质
  • 使用权重正则化较少模型过拟合
  • 算法系列——算法入门之递归分而治之思想的实现
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 移动端解决方案学习记录
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #单片机(TB6600驱动42步进电机)
  • (11)MSP430F5529 定时器B
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C语言)球球大作战
  • (三)uboot源码分析
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)ObjectiveC 深浅拷贝学习
  • (转)程序员技术练级攻略
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .gitattributes 文件
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET Core 项目指定SDK版本
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • @Documented注解的作用
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • []sim300 GPRS数据收发程序