作者 | summer
导读 :爱番番企业查问会集了全网 2 亿 + 企业多维度全方位信息,应用开源全文搜索引擎 Elasticsearch(下文简称 ES)作为搜寻平台,致力于让用户更快更准的找到所需企业,但怎么能让用户搜寻到称心的合乎预期的后果呢?本文将会讲述爱番番企业查问在检索后果优化方面的实际,冀望与大家一起交换。
全文 3943 字,预计浏览工夫 10 分钟。
01 初识
数据同步,平台搭建省略,咱们直奔主题,本文中的样例来源于测试录入,仅用于 dsl 查问语句后果展现。
我 :hello ES,很快乐与你相识,我当初有个需要,须要依据要害信息查问出蕴含该要害信息的企业,用什么比拟适合呢?
ES:匹配查问 match 最合适不过了,它是一个高级 全文查问 既能解决全文字段,又能解决准确字段。
我 :企业维度好多,我想多个字段进行匹配,应用 match 有些麻烦,有更便捷的形式吗?
ES:能够试试 multi\_match,multi\_match 默认状况下,它会为每个字段生成一个 match 查问。
我 :哇,太好了,我试试。
查到后果了,但后果中有些 name 中没有 ” 网讯科技 ” 其余字段中能够查到,有些 ” 网讯科技 ” 没在一起不是间断匹配的,甚至有些数据程序还不一样,这样的后果是咱们想要的吗?
每个平台对后果有本人的要求,有本人的评判规范,不能一概而论,咱们通过用户调研,行为剖析等形式发现用户次要关注以下几点:
- 查问后果与关键词的匹配度,次要偏重企业名称和法人;
- 冀望能够依据用户关注的条件,查问到相干企业信息;
- 在关键词匹配到的前提下,心愿可能依照企业衰弱状况排列(如:经营状态是否失常,注册资本怎么样,是否存在危险等)。
如何让用户关注的企业被检索进去呢?该如何进行优化呢?
02 摸索
想要解决问题,先要晓得问题呈现的起因,这样能力针对性的解决,上面让咱们走进 es 吧。
ES 是一个开源的搜索引擎,建设在一个全文搜索引擎库 Apache Lucene™ 根底之上,全文搜寻次要包含索引创立和索引查问两个局部。
- 索引创立:文档,将原始文档依照肯定规定分词,创立索引的过程。
分词 :analysis 即文本剖析,是把全文本转化为一系列单词(term / token)的过程,也叫分词;在 es 中通过 analyzer (分词器) 实现分词,可应用内置分词器也可按需定制分词器。
analyzer (分词器):
由三局部组成:
- Character Filter:将文本中 html 标签剔除掉;
- Tokenizer:依照规定进行分词,在英文中依照空格分词;
- Token Filter:将切分的单词进行加工,小写,删除 stopwords,减少同义词;
会依照规定进行分词,可通过 \_analyze 查问分词状况。
创立索引:
倒排序索引蕴含两个局部:
- 单词词典:记录所有文档单词,记录单词到倒排列表的关联关系;
- 倒排列表:记录单词与对应文档联合,由倒排索引项组成;
倒排索引项:
- 文档 id(DocId, Document Id),蕴含单词的文档 id,用于获取原始信息;
- 词频(TF,Term Frequency),记录 Term 在每篇文档中呈现的次数,用于后续相关性算分 (TF/IDF,BM25);
- 地位(Position),记录 Term 在每篇文档中的分词地位(多个),用于做词语搜寻(Phrase Query);
- 偏移(Offset),记录 Term 在每篇文档的开始和完结地位,用于高亮显示等。
由此可知索引中记录了分词的地位信息, 可用来解决不间断匹配的状况。
- 索引查问:依据关键字查问索引、依据索引查找具体文档、从而找到要查问的内容返回后果的过程。
ES 应用 布尔模型(Boolean model)查找匹配文档,并用一个名为 实用评分函数(practical scoring function)的公式来计算相关度。这个公式借鉴了 词频 / 逆向文档频率(term frequency/inverse document frequency)和 向量空间模型(vector space model),同时也退出了一些古代的新个性,如协调因子(coordination factor),字段长度归一化(field length normalization),以及词或查问语句权重晋升。
(详见官网文档:
https://www.elastic.co/guide/…)
默认状况下,返回后果是按相关性倒序排列的,每个文档都有相关性评分,用一个正浮点数字段 _score 来示意。_score 的评分越高,相关性越高。查问语句会为每个文档生成一个 _score 字段。评分的计算形式取决于查问类型不同的查问语句用于不同的目标:fuzzy 查问会计算与关键词的拼写类似水平,terms 查问会计算找到的内容与关键词组成部分匹配的百分比,然而通常咱们说的 relevance 是咱们用来计算全文本字段的值绝对于全文本检索词类似水平的算法。
影响相关度次要工具:
1、查问时权重晋升,任意类型的查问都能承受 boost 参数;
2、应用 constant\_score 查问,为任意一个匹配的文档指定评分,疏忽 TF/IDF 信息;
3、应用 function\_score 查问,它容许为每个与主查问匹配的文档利用一个函数,能够扭转甚至齐全替换原始查问评分 \_score。
可通过 explain 获取 dsl 查问后果的评分细节,仅做调试,生产环境不倡议应用。
03 优化
有了相干原理的反对,上面让咱们看下上述用户关注问题在爱番番中的解决实际吧。
3.1 关键词匹配度
1、增加独自依据企业名称、法人等用户重点关注信息短语匹配查问
match\_phrase 要求必须命中所有分词,并且返回的文档命中的词也要依照查问短语的程序,应用 slop 设置词的间距,要求较严格,满足条件能力被查问到。
2、设置企业名称和法人权重,法人退出短语匹配
能够依据数据品质通过 boost 调整权重,依据数据长度适当应用短语匹配,match 和 match\_phrase 搭配应用,即能防止独自应用 match\_phrase 导致的数量缩小又能进步文档相关性评分。
3.2 增加筛选项
将用户关注的条件增加到筛选项外面,让用户设置筛选条件,依据筛选条件过滤,查问到符合条件的企业。
应用 bool 查问的过滤器 filter,过滤器可缩小查问范畴,被过滤掉的内容不会影响返回内容的排序,不计算相关性评分,能够应用 ES 外部的缓存,晋升查问速度。
3.3 自定义评分
function\_score 查问,可能将全文查问与最新产生这种因子联合在一起评分,能够不齐全依据评分 \_score 或工夫 date 进行排序;能够使两个成果交融:依然依据全文相关度进行排序,但也会同时思考其余因素。
function\_score 提供了五种打分函数:
- weight:为每个文档利用一个简略而不被规范化的权重晋升值,最终后果 \_score 乘以一个权重数值;
- random\_score:为每个用户都应用一个不同的随机评分对后果排序;
- field\_value\_factor:应用某个字段影响 \_score;
- decay fucntion:包含 gauss、exp、linear 三种衰减函数;
- script\_score:这是最灵便的形式,应用自定义脚本管制评分计算;
联合爱番番本身场景,因子较多,波及到逻辑解决,咱们抉择了最灵便的 script\_score。
在脚本中通过 doc[‘field’] 获取文档字段,doc[‘field’].value 获取文档字段值。
应用了自定义评分最终后果的 score 记为 result\_score 的计算过程如下:
- 原始分数:原始文档相关性评分 score,记为 query\_score。
- 自定义函数得分:执行自定义打分函数失去的新的文档分数,记为 func\_score。
- 最终后果 score:最终文档分数 result\_score 等于 query\_score 与 func\_score 按某种形式计算的后果(计算形式由参数 boost\_mode 决定,默认是相乘)。
评分因子较多,每一个小的调整都会导致后果变更,调整前须要确定后果优化评判规范,调整中要有所偏重,有所均衡,上线后要采集用户查问满意度,或通过埋点等形式侧面评估成果,同时进行 badcase 收集,便于后续优化。
3.4 被动干涉
影响相关性评分因子较多,咱们须要依据数据状况进行取舍,达到后果的绝对均衡,难免会有 badcase 的呈现,为了晋升成果,咱们还进行了如下优化:
1、提取关键词
对重点信息(如:企业名称)能够提取关键词,增加 mapping,关键词应用短语匹配,晋升相关性评分,关键词抽取可查看《企业常识图谱技术与利用》。
2、二次排序
针对用户查问后果设置规定提取肯定数量,依据规定进行关键词匹配,匹配到关键词的企业排名放到后面。
最终查问后果:
04 总结
查问后果优化是个循序渐进的过程,须要一直调整,比照优化成果,其中免不了有一些衡量和取舍,找到适宜本人产品的最优设置。
爱番番企业查问后果优化就介绍到这里了,但这并不意味着咱们的优化到此结束,优化出适宜本人业务,合乎用户要求的查问后果,是咱们长期的指标,咱们会为此一直致力。
————END————
举荐浏览:
百度工程师带你探秘 C ++ 内存治理(实践篇)
YYEVA 动效播放器 – 动静元素完满出现新计划
百度交易中台之资产零碎架构浅析
从零到一理解 APP 速度测评
流日志轻松应答“10 亿级别 IP 对”简单场景,实现超大规模混合云网络流量可视化
百度 App Android 启动性能优化 - 工具篇
数字人技术在直播场景下的利用