`
suichangkele
  • 浏览: 198069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

elasticsearch的functionQuery

阅读更多

之前使用solr的时候,也接触过functionQuery,他就是用来对一个doc计算得分的,只改变排序,不改变match。es的functionQuery是第一次接触,看了看公司的代码,然后百度了一下,最后再看了下ES的官方文档,算是把ES的functionQuery给弄清楚了,再次记录下来。

 

ES的functionQuery需要两个主要变量,一个是query,用来计算候选集,也就是所有的doc的来源,一个是functionQuery,代码如下:

GET /_search
{
  "query": {
    "function_score": {
      "query": { "match_all": {} },
      "boost": "5", 
      "functions": [
        {
          "filter": { "match": { "test": "bar" } },
          "random_score": {}, 
          "weight": 23
        },
        {
          "filter": { "match": { "test": "cat" } },
          "weight": 42
        }
      ],
      "max_boost": 42,
      "score_mode": "max",
      "boost_mode": "multiply",
      "min_score": 42
    }
  }
}
 里面的query和functions是最重要的,query决定了候选集,也就是都是哪些doc要背functions里面的function计算得分。functions里面的都是函数,用来对query中命中的doc计算得分,所以functions中的函数只影响排序,不影响match的结果。对于每一个function,还有一个filter,这个表示只有被这个filter接受的doc才可以参与得分,如果没有写filter则表示match_all,注意filter的得分不考虑,不参与函数的得分,里面的weight,表示最终这个function的得分要乘以这个weight。

再说一下function_query中的其他参数:

  1. boost:这个是对于整个function_query的boost,就是lucene的boostedquery中的boost,不是我们要讨论的问题。
  2. max_boost:这个的意思是对于functions中的函数的最终得分,取一个上限,不能超过这个值。
  3. score_mode:这个表示的是多个function的值如何处理,可能是相加、相乘、取平均数、取最大值、最小值等。
  4. boost_mode:这个表示的是在算最终的得分的时候,怎么处理函数的得分和query的得分(也就是上面的query的得分),可以是相乘、相加、取代、取平均值等,如果不写,默认是相乘。
  5. min_score:这个的意思是如果一个doc的最终得分低于min_score,则不要这个doc,也就是规定了得分的下限。
 
函数,除了上面的functions中定义的query类型的,有好几个现成的的,下面的这几个最常用的。
1、script_score
    用脚本来实现的得分的逻辑,如下:
GET /_search
{
  "query": {
    "function_score": {
      "query": {
        "match": { "message": "elasticsearch" }
      },
      "script_score": {
        "script": {
          "params": {// 需要传入一个参数map,这个map用params表示。
            "a": 5,
            "b": 1.2
          },
          "source": "params.a / Math.pow(params.b, doc['my-int'].value)"// params就是上面的map,doc表示当前计算的doc,my-int表示一个字段,
        }
      }
    }
  }
}
 再ES中,可以将脚本保留在ES上,然后取一个id,以后的使用就可以直接根据id来从ES集群中获得这个脚本而不用每次都传到ES了。
2、Random, 随机数
GET /_search
{
  "query": {
    "function_score": {
      "random_score": {
        "seed": 10,
        "field": "_seq_no"
      }
    }
  }
}
 默认情况下,是按照lucene的内部id来计算随机值的,这样也是最有效率的,但是这个值会变,所以如果能接受同一个doc的函数值会变,就可以使用这个,否则必须要提供一个seed和field,用来计算随机值,另外还会使用这个doc所在的分片参与最终得分的计算,所以如果field中值是一样的,如果不同分片中的,可能会有不同的值,同一个分片中的有相同的值。
 3、filed_value_factor
这个是使用字段的值来计算得分的,如下:
GET /_search
{
  "query": {
    "function_score": {
      "field_value_factor": {
        "field": "my-int",// 字段
        "factor": 1.2,
        "modifier": "sqrt",
        "missing": 1
      }
    }
  }
}
 上面每个属性的意思解释如下:
field:字段
factor:将字段的分值乘以这个值
modifier:这个是对factor*field.value的值再做计算的,他有好多函数比如:none(没有任何操作),log(对数函数),log1p(加一后取对数),log2p(加2后取对数),ln, ln1p,ln2p,sqrt等。
 
 
 
 
分享到:
评论

相关推荐

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战)

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...

    7.17.1系列Elasticsearch的elasticsearch-analysis-ik分词器

    适用于7.17.1系列,例如Elasticsearch的7.17.12版本。 elasticsearch-analysis-ik 是一个常用的中文分词器,在 Elasticsearch 中广泛应用于中文文本的分析和搜索。下面是 elasticsearch-analysis-ik 分词器的几个...

    elasticsearch elasticsearch-6.2.2 elasticsearch-6.2.2.zip 下载

    根据提供的文件信息,我们可以推断出本篇文章将围绕Elasticsearch 6.2.2版本进行详细介绍,包括其下载方式、主要功能特性以及在实际应用中的常见用途。 ### Elasticsearch简介 Elasticsearch是一款基于Lucene的...

    elasticsearch 8.11.3 windows安装包

    Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,...

    es-head Elasticsearch的可视化操作插件

    es-head是一个针对Elasticsearch的可视化操作插件。它提供了一个便捷的操作工具,可以连接Elasticsearch搜索引擎,并提供可视化的操作页面,对Elasticsearch进行各种设置和数据检索功能的管理。 es-head 插件可以在...

    elasticSearch(ES)最新版 ik分词插件7.10 elasticsearch-analysis-ik-7.10.0

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene构建,提供了分布式、RESTful风格的搜索和分析引擎服务。在中文环境下,为了实现精确的分词和搜索,我们需要安装适合版本的分词插件,如“elastic...

    Elasticsearch 开机自启脚本

    `start` 用于启动Elasticsearch,这里使用 `su` 命令切换到指定的Elasticsearch用户(例如 `es-admin`),然后进入Elasticsearch的安装目录并执行 `bin/elasticsearch` 文件以后台模式启动服务。`stop` 通过查找并杀...

    Elastic Search搭建使用教程.pdf(内含ElasticSearch教程权威指南)

    Elasticsearch是一款基于Lucene的开源搜索引擎,它使用RESTful接口进行数据操作,数据以JSON格式存储。Elasticsearch以其高效的全文搜索功能,实时数据处理能力,以及易于使用的特性,在众多企业中得到了广泛应用,...

    基于.netcore搜索封装ElasticSearch.zip

    这个名为"基于.netcore搜索封装ElasticSearch.zip"的压缩包,显然包含了一个针对.NET Core平台的Elasticsearch客户端库,方便开发者在.NET Core应用中集成和操作Elasticsearch。 Elasticsearch是一个开源的分布式...

    elasticsearch-6.8.18.rar(elasticsearch-6.8.18.zip)

    Elasticsearch是一个强大的开源搜索引擎,基于Apache Lucene构建,它为开发者和数据分析师提供了高效、可扩展、实时的搜索和分析功能。6.8.18版本是Elasticsearch的一个稳定版本,它在前几个版本的基础上进行了优化...

    elasticsearch7.14.0.zip

    Elasticsearch 7.14.0 是一个高度可扩展的全文搜索引擎,广泛应用于日志分析、实时数据分析和全文检索等多个领域。这个压缩包包含了针对Windows和Linux操作系统的安装包,便于在不同环境下部署和使用Elasticsearch。...

    elasticsearch服务器安装包

    2. **下载安装包**:这里的"es安装包"即为Elasticsearch的安装文件,通常是一个zip或tar.gz格式的压缩包。你需要从官方网站或者镜像站点下载对应版本的安装包,确保与你的系统兼容。 3. **解压安装**:下载完成后,...

    elasticsearch-6.8.3-API文档-中文版.zip

    赠送jar包:elasticsearch-6.8.3.jar; 赠送原API文档:elasticsearch-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-6.8.3-sources.jar; 赠送Maven依赖信息文件:elasticsearch-6.8.3.pom; 包含翻译后的API文档...

    elasticsearch-analysis-pinyin-7.4.0 es拼音分词器7.4.0

    Elasticsearch(简称ES)是一款强大的开源搜索引擎,广泛应用于大数据领域的全文检索。它以其高可扩展性、实时性能以及丰富的分析能力著称。在中文环境下,由于汉字的复杂性,分词是实现有效搜索的关键步骤。为此,...

    Elasticsearch 开发手册

    在数据抽取 ELT 领域,ES 全家桶 ELK(Elasticsearch+Logstash+Kibana)赫赫有名。 Elasticsearch 基本概念: * 倒排索引:Elasticsearch 为什么快,核心设计理念就是采用了倒排索引机制。倒排索引的方式是,根据 ...

    Elasticsearch-head谷歌插件谷歌插件.zip

    "es-head"是Elasticsearch-head的简写,它允许用户无需编写复杂的curl命令就能与Elasticsearch进行交互。通过这个插件,你可以查看索引的状态,监控节点健康状况,查看集群统计信息,甚至进行索引的创建、删除和映射...

    elasticsearch-7.17.6及对应版本IK分词

    elasticsearch-7.17.6及对应版本IK分词 适合人群:elasticsearch初学者 Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elastic...

    elasticsearch7.17.11版本分词器插件安装包

    Elasticsearch(简称ES)是一款基于Lucene的分布式、RESTful搜索引擎,广泛应用于日志收集、数据分析等领域,是ELK(Elasticsearch、Logstash、Kibana)堆栈的重要组成部分。在处理中文数据时,合理的分词对于提升...

    elasticsearch7.17.10-最新支持Java1.8版本

    Elasticsearch 7.17.10 是一个强大的开源搜索引擎和分析引擎,主要用于全文搜索、结构化搜索、近实时分析以及大数据处理。这个版本特别强调对Java 1.8(即Java 8)的支持,这意味着它可以在运行Java 8的环境中稳定...

Global site tag (gtag.js) - Google Analytics