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 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/495753.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序引入Vant插件

Vant官网&#xff1a;Vant Weapp - 轻量、可靠的小程序 UI 组件库 先查看官网的版本 新建一个package.json页面&#xff0c;代码写上&#xff1a;&#xff08;我先执行的npm安装没出package页面&#xff0c;所以先自己创建了一个才正常&#xff09; {"dependencies"…

物联网APP开发:技术、挑战与前景

随着科技的快速发展&#xff0c;物联网&#xff08;IoT&#xff09;已经成为当今世界的重要趋势。物联网是将物理世界的各种“事物”与互联网连接起来&#xff0c;通过智能设备、传感器和执行器实现数据的收集、交换和处理&#xff0c;以改善生活和工作的方式。物联网APP是实现…

东芝工控机维修东芝电脑PC机维修FA3100A

TOSHIBA东芝工控机维修电脑控制器PC机FA3100A MODEL8000 UF8A11M 日本东芝TOSHIBA IA controller维修SYU7209A 001 FXMC12/FXMC11;BV86R-T2GKR-DR7YF-8CPPY-4T3QD; CPU处理单元是可编程逻辑控制器的控制部分。它按照可编程逻辑控制器系统程序赋予的功能接收并存储从编程器键入…

【Vite】解决Vite http proxy error: Error: connect ECONNREFUSED

今天写bug&#xff0c;发现了这个问题 我经过我一晚上的搜索努力&#xff0c;在github上找到了解决办法&#xff0c;不得不说&#xff0c;交友网站还是很好用的。 参考 这一行是关键代码。 因为我连的是本地后台服务&#xff0c;所以最后配置成这样 server: {open: true,pro…

Codeforces Round 929 (Div. 3)(A~E)

A. Turtle Puzzle: Rearrange and Negate 对数组求和&#xff0c;负数当正数来用&#xff0c;输出和。 #include <bits/stdc.h> //#define int long long #define per(i,j,k) for(int (i)(j);(i)<(k);(i)) #define rep(i,j,k) for(int (i)(j);(i)>(k);--(i)) #de…

机器视觉运动控制一体机在光伏汇流焊机器人系统的解决方案

一、市场应用背景 汇流焊是光伏太阳能电池板中段加工工艺&#xff0c;其前道工序为串焊&#xff0c;在此环节流程中&#xff0c;需要在多个太阳能电池片表面以平行方式串焊多条焊带&#xff0c;形成电池串。串焊好的多组电池串被有序排列输送到汇流焊接工作台&#xff0c;通过…

Qt6.8 GRPC功能使用(2)标准 Qt实现客户端

简介 基于之前的文章所说&#xff0c; Qt6.7之后才开始支持客户端、服务端、及双向流&#xff0c;恰好电脑需要重装&#xff0c;看到Qt6.8版本就直接安装了&#xff0c;内容也是使用Qt6.8的版本进行编译的 客户端实现步骤 1. 安装Qt6.8, 包含GRPC功能模块 Qt 6.8安装目录下包…

Python爬虫实战第二例【二】

零.前言&#xff1a; 本文章借鉴&#xff1a;Python爬虫实战&#xff08;五&#xff09;&#xff1a;根据关键字爬取某度图片批量下载到本地&#xff08;附上完整源码&#xff09;_python爬虫下载图片-CSDN博客 大佬的文章里面有API的获取&#xff0c;在这里我就不赘述了。 一…

[Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包

一、设置应用包名 在Flutter开发中&#xff0c;修改应用程序的包名&#xff08;也称作Application ID&#xff09;涉及几个步骤&#xff0c;因为包名是在项目的Android和iOS平台代码中分别配置的。请按照以下步骤操作&#xff1a; 1.Android Flutter工程中全局搜索替换包名 …

【数据结构】OJ面试题《设计循环队列》(题库+代码)

1.前言 本题需要结构体和数组的知识&#xff0c;记录每天的刷题&#xff0c;继续坚持&#xff01; 2.OJ题目训练 设计循环队列 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队…

Mac 配置Clion Qt 调试显示变量值

背景 使用Clion开发Qt程序&#xff0c;在进行调试时&#xff0c;会看不到Qt类的变量值&#xff0c;只有指针形式&#xff0c;对于调试很不方便。 环境&#xff1a; Macbook ProCPU&#xff1a;M3Qt 5.15.13CLion 2023.3.4 解决方案 为了让Clion能显示Qt类的值&#xff0c;…

BL0942 内置时钟免校准计量芯片 用于智能家居领域 低成本

BL0939是上海贝岭股份有限公司开发的一款用于智能家居领域进行电能测量的专用芯片&#xff0c;支持两路测量&#xff0c;可同时进行计量和漏电故障检测&#xff0c;漏电检测电流可设&#xff0c;响应时间快&#xff0c;具有体积小&#xff0c;外围电路简单&#xff0c;成本低廉…