1、query-time boost 查询的时候设置query的boost. 增加权重
2、重构查询结构.如should中嵌套bool。
3、negative boost 包含了negative term的doc,分数乘以negative boost,分数降低
4、constant_score 如果你压根儿不需要相关度评分,直接走constant_score加filter,所有的doc分数都是1,没有评分的概念了
1、query-time boost
GET /forum/article/_search
"query": {
"bool": {
"should": [
"match": {
"title": {
"query": "java spark",
"boost": 2
"match": {
"content": "java spark"
2、重构查询结构
重构查询结果,在es新版本中,影响越来越小了。一般情况下,没什么必要的话,大家不用也行。
GET /forum/article/_search
"query": {
"bool": {
"should": [
"match": {
"content": "java" 1/3
"match": {
"content": "spark" 1/3
"bool": {
"should": [
"match": {
"content": "solution" 1/6
"match": {
"content": "beginner" 1/6
3、negative boost
搜索包含java,不包含spark的doc,但是这样子很死板
搜索包含java,尽量不包含spark的doc,如果包含了spark,不会说排除掉这个doc,而是说将这个doc的分数降低
包含了negative term的doc,分数乘以negative boost,分数降低
GET /forum/article/_search
"query": {
"bool": {
"must": [
"match": {
"content": "java"
"must_not": [
"match": {
"content": "spark"
GET /forum/article/_search
"query": {
"boosting": {
"positive": {
"match": {
"content": "java"
"negative": {
"match": {
"content": "spark"
"negative_boost": 0.2
negative的doc,会乘以negative_boost,降低分数
4、constant_score
如果你压根儿不需要相关度评分,直接走constant_score加filter,所有的doc分数都是1,也可以加上boost指定一个固定的分数,比如0,就是纯不计算积分,也就没有评分的概念了
GET /forum/article/_search
"query": {
"bool": {
"should": [
"constant_score": {
"boost": 0,
"filter": {
"match": {
"title": "java"
"constant_score": {
"boost": 0,
"filter": {
"match": {
"title": "spark"
1. 在搜索中,我们有这样一种需求,期望搜索的结果中包含java 如果标题中包含hadoop或spark就优先搜索出来,同时呢,如果一个帖子包含java hadoop,一个帖子包含java spark,包含hadoop的帖子要比spark优先搜索出来
对于这样的需求,通俗来讲,就是需要通过增大某些搜索条件的权重,从而在搜索的结果中,更多符合和满足我们业务场景的数据靠前搜索出来,在es中可以通过boost关键词来增加搜索条件的权重,
GET /forum/article/_search
"query": {
"bool": {
"must": [{
"match": {
"title": "java"
"should": [{
"match": {
"title": {
"query": "hadoop"
"match": {
"title": {
"query": "spark",
"boost": 2
"match": {
"title": {
"query": "php"
"match": {
"title": {
"query": "hadoop",
"boost": 5
参考:elasticsearch中四种常见的相关度分数优化方法 - PHP面试网
1. 相关度评分算法的组成
对于Elasticsearch而言,相关度评分的计算规则通过三部分组成: boolean model,TF/IDF,Vector space model。这三个部分没有所谓的权重,它们是平等的,计算时逐层推进。
1.1 boolean model
boolean model是相关度分数计算的第一步操作。
Elasticsearch搜索时,首先根据搜索条件,过滤出符合条件的document,此时Elasticsearch不会做任何的相关度分数计算,仅仅只记录true或false,标
在本文中我们将深入研究四种特殊的查询类型:Boosting Query、Constant Score Query、Dis Max Query和Function Score Query的特性、参数说明以及使用示例。
Elasticsearch 会为 query 的每个文档计算一个相关度得分 score ,并默认按照 score 从高到低的顺序返回搜索结果。 在很多场景下,我们不仅需要搜索到匹配的结果,还需要能够按照某种方式对搜索结果重新打分排序。例如:Function score query 就可以让我们实现对最终 score 的自定义打分。为了方便,下面把 ES 对 匹配的文档进行打分得到的 score 记为 ,而最终搜索结果的 score 记为 ,显然,一般情况下(也就是不使用自定义打分时), 就是 。那么
相关度评分背后的理论
Lucene(或 Elasticsearch)使用 布尔模型(Boolean model) 查找匹配文档,并用一个名为 实用评分函数(practical scoring function) 的公式来计算相关度。这个公式借鉴了 词频/逆向文档频率(term frequency/inverse document frequency) 和 向量空间模型(vector s...
relevance score(相关性分数) 算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度。Elasticsearch使用的是 term frequency/inverse document frequency算法,简称为TF/IDF算法。TF词频(Term Frequency),IDF逆向文件频率(Inverse Document Frequency)搜索文本中的各个词条在field文本中出现了多少次,出现次数越多,就越相关。数学公司并不重要,看下面例子就清楚了。
ES相关度分数评分算法分析, ES 实现相关度分析底层原理 使用 boolean模型,TFIDF,VSM空间向量模型计算相关度,使用 boost, negativeboost 来增加,削弱 查询条件权重进行分数调优
本文章收录于【Elasticsearch系列】,将详细的讲解 Elasticsearch 整个大体系,包括但不限于ELK讲解、ES调优、海量数据处理等本文大纲一、filter执行原理深度...
一、关于elasticsearch7.8的搜索方式与实景应用(上)
本文是在elasticsearch7.8的环境下操作的,最近也很忙没时间去整理,终于肝了一篇出来。关于ES,接触的很早,了解他却很迟,有种相恨见晚的感觉,最近在项目上又一次碰见了它,不由得再来感叹一遍。
1、问题初始
1.1、应用场景:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T6oWimxM-1608017669710)(C:\Users\Jay\AppData\Roaming\Typora\t
复合查询包装其他复合或叶子查询,以组合其结果和分数,更改其行为,或从查询切换到筛选器上下文。
1.1、constantScoreQuery
包含另一个查询但在过滤器上下文中执行的查询。所有匹配的文档都给出相同的“常量”_score。
1.2、boolQuery【最常用】
用于组合多个叶子或复合查询子句的默认查询,包含must,should,must_n...
本文将帮助您深入了解ElasticSearch。 我们将审查可满足典型项目至少95%需求的主要功能。 如果您是ElasticSearch的新手,在本文中您将找到几乎所有在使用新数据库之前应提出的问题的答案。什么是ElasticSearch?Elasticsearch是一个全文搜索引擎,用于存储无模式的JSON文档。 Elasticsearch是基于Apache Lucene的开源软件,并根据Apa...
analyzer
指定分词器。elasticsearch是一款支持全文检索的分布式存储系统,对于text类型的字段,首先会使用分词器进行分词,然后将分词后的词根一个一个存储在倒排索引中,后续查询主要是针对词根的搜索。
analyzer该参数可以在每个查询、每个字段、每个索引中使用,其优先级如下(越靠前越优先):
1、字段上定义...