ES标签搜索并解决评分排序问题
一、概述
需求:
最近在做一个新闻项目,有这样一个需求,如下:
- 用户根据视频内容手动创建标签,标签个数不限
- 在视频详情页提供根据标签推荐视频功能,即按本视频的标签进行搜索,标签匹配多的排在前面,匹配少的排在后面
- 字段为keyword类型,数据以数组存储,未找到可实现此功能的检索方式
- 字段为text类型,多个标签以空格隔开或者数组存储,使用match搜索,数据评分不准确
- 字段为text类型,多个标签以空格隔开或者数组存储,使用match结合match_phrase搜索,数据评分扔不准确
1. 字段为text类型,指定分词器为whitespace,以空格分隔标签
- "mediaTag" : {
- "type" : "text",
- "analyzer": "whitespace"
- }
2. 字段为text类型,指定分词器为pattern,指定标签分隔字符,以逗号分隔
- PUT /es_medias_test2
- {
- "settings": {
- "analysis": {
- "analyzer": {
- "comma": { //自定义分词器名称
- "type": "pattern",
- "pattern": ","
- }
- }
- }
- },
- "mappings": {
- "esmedias": {
- "properties": {
- "mediaTag": {
- "type": "text",
- "analyzer": "comma"
- }
- }
- }
- }
- }
二、可行方案测试(以可行方案一为例)
- PUT /es_medias_test2
- {
- "settings": {
- "index": {
- "number_of_shards": "1",
- "number_of_replicas": "0"
- }
- },
- "mappings": {
- "esmedias": {
- "properties": {
- "mediaTag" : {
- "type" : "text",
- "analyzer": "whitespace"
- }
- }
- }
- }
- }
- POST /es_medias_test2/_bulk
- {"create":{"_index":"es_medias_test2","_type":"esmedias","_id":"o3kyp3YB_f4AQBwwbA7Q"}}
- {"mediaTag":"美国 英国"}
- {"create":{"_index":"es_medias_test2","_type":"esmedias","_id":"lHk0p3YB_f4AQBwwvxBz"}}
- {"mediaTag":"英国 美国"}
- {"create":{"_index":"es_medias_test2","_type":"esmedias","_id":"-Xk1p3YB_f4AQBwwNRBt"}}
- {"mediaTag":"美国 法国 英国"}
- {"create":{"_index":"es_medias_test2","_type":"esmedias","_id":"AXlYp3YB_f4AQBww9zDT"}}
- {"mediaTag":"china 美国 英国"}
- {"create":{"_index":"es_medias_test2","_type":"esmedias","_id":"13k1p3YB_f4AQBwwBxDw"}}
- {"mediaTag":"美国 英国 士大夫"}
- {"create":{"_index":"es_medias_test2","_type":"esmedias","_id":"PXk1p3YB_f4AQBwwfxGI"}}
- {"mediaTag":"美国"}
- {"create":{"_index":"es_medias_test2","_type":"esmedias","_id":"G3k1p3YB_f4AQBwwahEM"}}
- {"mediaTag":"英国 船"}
- {"create":{"_index":"es_medias_test2","_type":"esmedias","_id":"G3lap3YB_f4AQBwwNTEX"}}
- {"mediaTag":"china 美国"}
- {"create":{"_index":"es_medias_test2","_type":"esmedias","_id":"FXlLp3YB_f4AQBwwUCRf"}}
- {"mediaTag":"china 美国 法国"}
- GET /es_medias_test2/_search
- {
- "query": {
- "match": {
- "mediaTag": "美国 英国"
- }
- }
- }
返回结果符合预期
- {
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 10,
"max_score" : 1.8475795,
"hits" : [
{
"_index" : "es_medias_test2",
"_type" : "esmedias",
"_id" : "-Xk1p3YB_f4AQBwwNRBt",
"_score" : 1.8475795,
"_source" : {
"mediaTag" : "美国 法国 英国"
}
},
{
"_index" : "es_medias_test2",
"_type" : "esmedias",
"_id" : "FXlLp3YB_f4AQBwwUCRf",
"_score" : 1.5141833,
"_source" : {
"mediaTag" : "china 美国 法国"
}
},
{
"_index" : "es_medias_test2",
"_type" : "esmedias",
"_id" : "o3kyp3YB_f4AQBwwbA7Q",
"_score" : 0.66557413,
"_source" : {
"mediaTag" : "美国 英国"
}
},
{
"_index" : "es_medias_test2",
"_type" : "esmedias",
"_id" : "xXkyp3YB_f4AQBwwpw6Y",
"_score" : 0.66557413,
"_source" : {
"mediaTag" : "美国 英国"
}
},
{
"_index" : "es_medias_test2",
"_type" : "esmedias",
"_id" : "lHk0p3YB_f4AQBwwvxBz",
"_score" : 0.66557413,
"_source" : {
"mediaTag" : "英国 美国"
}
},
{
"_index" : "es_medias_test2",
"_type" : "esmedias",
"_id" : "13k1p3YB_f4AQBwwBxDw",
"_score" : 0.5578373,
"_source" : {
"mediaTag" : "美国 英国 士大夫"
}
},
{
"_index" : "es_medias_test2",
"_type" : "esmedias",
"_id" : "AXlYp3YB_f4AQBww9zDT",
"_score" : 0.39778596,
"_source" : {
"mediaTag" : "china,美国 英国"
}
},
{
"_index" : "es_medias_test2",
"_type" : "esmedias",
"_id" : "G3k1p3YB_f4AQBwwahEM",
"_score" : 0.39778596,
"_source" : {
"mediaTag" : "英国 船"
}
},
{
"_index" : "es_medias_test2",
"_type" : "esmedias",
"_id" : "PXk1p3YB_f4AQBwwfxGI",
"_score" : 0.33188638,
"_source" : {
"mediaTag" : "美国"
}
},
{
"_index" : "es_medias_test2",
"_type" : "esmedias",
"_id" : "G3lap3YB_f4AQBwwNTEX",
"_score" : 0.26778817,
"_source" : {
"mediaTag" : "china 美国"
}
}
]
}
}
ES标签搜索并解决评分排序问题的更多相关文章
- #研发解决方案介绍#基于ES的搜索+筛选+排序解决方案
郑昀 基于胡耀华和王超的设计文档 最后更新于2014/12/3 关键词:ElasticSearch.Lucene.solr.搜索.facet.高可用.可伸缩.mongodb.SearchHub.商品中 ...
- ElasticSearch 学习记录之ES高亮搜索
高亮搜索 ES 通过在查询的时候可以在查询之后的字段数据加上html 标签字段,使文档在在web 界面上显示的时候是由颜色或者字体格式的 GET /product/_search { "si ...
- wukong引擎源码分析之索引——part 3 文档评分 无非就是将docid对应的fields信息存储起来,为搜索结果rank评分用
之前的文章分析过,接受索引请求处理的代码在segmenter_worker.go里: func (engine *Engine) segmenterWorker() { for { request : ...
- atitit.无线上网卡 无法搜索WiFi 解决无线路由器信号不能被连接
atitit.无线上网卡 无法搜索WiFi 解决无线路由器信号不能被连接 #---现象 pc机无线网卡无法搜索到无线路由器的信号.. 但是,笔记本电脑和手机能够... 只要pc机无线网卡可以搜索信号, ...
- C++ sqlite3解决中文排序问题
导言:sqlite3默认的编码方式为UTF8编码,而在UTF8编码下,中文不是按照拼音顺序编码的,所以想解决中文排序问题,必须自定义排序规则,将UTF8编码转换成GB2312编码(GB2312编码中文 ...
- xpath教程一---简单的标签搜索
工具 Python3版本 lxml库[优点是解析快] HTML代码块[从网络中获取或者自己杜撰一个] requests[推荐安装,从网页上获取网页代码练手,再好不过了] 讲解 网页代码都是成对的标签, ...
- selenium 获取不了标签文本的解决方法
selenium 获取不了标签文本的解决方法 ------ 即driver.find_element_by_xxx().text() 为空的解决办法 如果得到的文本只为空,而非我们期望的baidu,那 ...
- python用户评论标签匹配的解决方法
python用户评论标签匹配的解决方法 这篇文章主要为大家详细介绍了python用户评论标签匹配的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 我们观察用户评论发现:属性词往往和情感词伴 ...
- es lucene搜索及聚合流程源码分析
本文以TermQuery,GlobalOrdinalsStringTermsAggregator为例,通过代码,分析es,lucene搜索及聚合流程.1:协调节点收到请求后,将search任务发到相关 ...
随机推荐
- 虚拟机下Ubuntu共享文件夹不能显示的一种解决方法
原文链接:https://blog.csdn.net/huyangzhilin/article/details/70666937
- Vmware无法生成本地连接
打开Vmware使用乌班图 结果发现没有办法连接本地连接,那就是注册表出现了问题 今天推荐一个好软件 然后使用进行清理缓存,重新注册表 然后直接点击虚拟机里面的编辑->虚拟网络编辑器->把 ...
- JZOJ2020年8月14日提高组反思
JZOJ2020年8月14日提高组反思 T1 看到题 一脸:我是谁,我在哪,我要干啥 看到字符串凉一半 还有查询修改 想到线段树但不会建模 暴力安排 T2 一开始觉得:水题 然后啪啪打脸 空间小,数据 ...
- 20190627_解决ADB的device offline问题的两种方法
故障现象: error: device offline 故障解决: 第一种方法: C:\Users\WXY\Desktop\XY\adb>adb nodaemon server cannot b ...
- 解决:com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known serve ...
- Mysql-索引分析查询性能
explain 全文只有一个关键点,那就是explain,explain 显示了MySQL如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句.简单讲,它的作用就 ...
- 嘶吼CTF easy calc
进入之后可以看到我们需要输入一个计算式来得到答案,burpsuite进行抓包之后发现页面来自于calc.php 我们直接访问calc.php页面 发现源代码泄露 可以看到当我们没有输入num值的时候就 ...
- 百度网盘下载器:SpeedPan2.3.8
SpeedPan是款百度网盘资源下载工具,下载速度还行(至少比百度网盘快太多了),支持登录百度账号,也支持免登录下载.官网免费版的取消分享了,我从油管上看到了这个软件,分享给大家. 天翼云:https ...
- Java集合源码分析(七)——TreeMap
简介 TreeMap 是一个有序的key-value集合,它的内部是通过红黑树实现的. TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合. TreeMap ...
- 移动端H5开发中的常见问题处理
1.问题之合成海报: 功能技术:http://html2canvas.hertzen.com 问题描述:合成模糊.合成区域内容错位,合成不完整,合成边缘白条等. 解决方案:如有页面布局正常合成错位的, ...