`
suichangkele
  • 浏览: 200440 次
  • 性别: 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是一个...

    ES客户端+谷歌浏览器插件+Multi-Elasticsearch-Head

    多弹性搜索头,对著名的 Elasticsearch Head 的改进 1.保存和存储几个Elasticsearch端点 2.索引选项卡中的更多列 3. 任何请求现在都可以像 /_cat/indices 一样处理 JSON 返回 4. 更简约的外观(更小的字体等...) ...

    ES查询客户端,elasticsearch可视化工具 elasticsearch查询客户端

    Elasticsearch(简称ES)是一款强大的开源搜索引擎,广泛应用于数据检索、分析和管理。作为分布式、RESTful风格的搜索和数据分析引擎,Elasticsearch能够提供实时、高可用性以及可扩展的搜索功能。在进行日常的数据...

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

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

    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 使您能够以交互方式探索、可视化和分享对数据的见解,...

    Windows版本(8.11)ElasticSearch、elasticsearch-head、kibana、IK分词

    **Elasticsearch 8.11 for Windows** Elasticsearch 是一个开源的分布式搜索引擎,以其高可伸缩性、实时性、灵活性以及强大的数据分析能力而闻名。在Windows平台上部署Elasticsearch,用户可以利用其强大的搜索和...

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

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

    Elasticsearch 开机自启脚本

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

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

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

    elasticsearch7.14.0.zip

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

    elasticsearch服务器安装包

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

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

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

    适用于elasticsearch7.12.1版本

    Elasticsearch 7.12.1 是一个强大的开源全文搜索引擎,它基于 Lucene 库进行构建,提供了分布式、实时的搜索和分析引擎服务。这个版本的 Elasticsearch 针对性能和稳定性进行了优化,适用于大规模数据检索和分析场景...

    elasticSearch-8.14.1-windows

    Elasticsearch 8.14.1 是一个高度可扩展的开源全文检索和分析引擎,专为分布式环境设计。它允许开发者和系统管理员快速、高效地存储、搜索和分析大量数据。Elasticsearch 广泛应用于日志分析、信息检索、网站搜索、...

    基于.netcore搜索封装ElasticSearch.zip

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

    elasticsearch未授权访问 漏洞修复

    Elasticsearch 是一个流行的开源全文搜索引擎,常用于大数据分析和实时数据检索。然而,如果没有正确配置安全设置,它可能会暴露于未授权访问的风险中,这可能导致数据泄露或恶意操作。本文将详细讲解如何修复 ...

    elasticsearch-jieba-plugin 8.8.2.zip

    `elasticsearch-jieba-plugin`正是将jieba分词库与Elasticsearch进行了深度融合,使得ES在处理中文文本时能展现出卓越的性能。 安装此插件的过程简单明了。首先,下载`elasticsearch-jieba-plugin 8.8.2.zip`压缩包...

    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文档...

Global site tag (gtag.js) - Google Analytics