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

    elasticsearch elasticsearch-6.2.2 elasticsearch-6.2.2.zip 下载

    elasticsearch elasticsearch-6.2.2 elasticsearch-6.2.2.zip 下载

    elasticsearch-7.17.6及对应版本IK分词

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

    最新版本springboot集成elasticsearch

    一、概述 一般来说我们开发Elasticsearch会选择...2、elasticsearch-head (方便查看ES中的索引及数据) 3、Kibana(方便开发通过rest api 调试ES,有代码提示) 4、中文分词elasticsearch-analysis-ik (ik) 1、下载ela

    elasticsearch-8.2.3 windows 版本

    elasticsearch-8.2.3 windows 版本。 Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的...

    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-6.3.0-API文档-中文版.zip

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

    es docker 部署 elasticsearch.yml

    docker run --name elasticsearch7.16.3 -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" -v /Users/xingyue/Home/xingyue/学习/工程化/es/elasticsearch.yml:/usr/share/elastic...

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

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

    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-6.2.3-API文档-中文版.zip

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

    ElasticSearch实战 in Action.zip

    ElasticSearch实战 in Action(原著原版)压缩包,ElasticSearch文档,ES全文检索从入门到精通,高清PDF,是学习es和精通es必备手册,能快速达到精通ElasticSearch,一册在手,ElasticSearch无忧,开发、学习、调优...

    最新版windows elasticsearch-8.8.2-windows-x86-64.zip

    最新版windows elasticsearch-8.8.2-windows-x86_64.zip最新版windows elasticsearch-8.8.2-windows-x86_64.zip最新版windows elasticsearch-8.8.2-windows-x86_64.zip最新版windows elasticsearch-8.8.2-windows-...

    elasticsearch-shield-2.3.2.jar

    1、进入到Elasticsearch的安装路径下,本文中以该路径为例子:/ultra/ES/elasticsearch-2.3.4。先安装license,执行以下命令: ./bin/plugin install license 2、再安装shield,执行以下命令: ./bin/plugin ...

    ElasticSearch数据导出

    ElasticSearch数据导出 elasticsearch单文档数据导出 支持自定义查询 导出数据Json文件

    java语言kafka数据批量导入到Elasticsearch实例

    消费kafka数据,然后批量导入到Elasticsearch,本例子使用的kafka版本0.10,es版本是6.4,使用bulk方式批量导入到es中,也可以一条一条的导入,不过比较慢。 <groupId>org.elasticsearch <artifactId>elastic...

    ElasticSearch官网文档中文版

    ElasticSearch官网文档中文版

    ElasticSearch Java API 中文文档

    ElasticSearch Java API 中文文档 ElasticSearch Java API 中文文档

    Elasticsearch 开机自启脚本

    Elasticsearch 开机自启脚本,方便用户自动启动Elasticsearch,也可以直接用systemctl启动或是关闭

    十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统.pdf

    十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统。 什么是elasticsearch Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能。 大名鼎鼎的Lucene 搜索引擎被广泛用于搜索...

Global site tag (gtag.js) - Google Analytics