原文链接:http://blog.csdn.net/dm_vincent/article/details/42201789
本章翻译自Elasticsearch官方指南的Controlling Relevance一章。
根据过滤子集来提升(Boosting Filtered Subsets)
回到在忽略TF/IDF(Ignoring TF/IDF)中处理的那个问题,我们需要根据每个度假酒店拥有的卖点数量来对它们的相关度分值进行计算。我们希望利用缓存的过滤器来影响分值,而function_score则正好可以实现该目标。
在目前的例子中,我们为所有的文档都使用了一个函数。现在我们希望使用过滤器将结果分成子集(一个卖点对应一个过滤器),然后对每个子集适用一个不同的函数。
我们使用的函数名为weight,它和查询中接受的boost参数类似。区别在于weight不会被Lucene规范化成某个浮点数;它会被原样使用。
查询的结构需要改变来容纳多个函数:
GET /_search
{
"query": {
"function_score": {
"filter": {
"term": { "city": "Barcelona" }
},
"functions": [
{
"filter": { "term": { "features": "wifi" }},
"weight": 1
},
{
"filter": { "term": { "features": "garden" }},
"weight": 1
},
{
"filter": { "term": { "features": "pool" }},
"weight": 2
}
],
"score_mode": "sum",
}
}
}
上述例子中出现的新特性会在下面的小节中进行解释:
过滤器vs查询
首先,我们在function_score中使用的是filter,而不是query。在上例中,我们没有必要使用全文搜索。我们只是想得到在city字段中出现了Barcelona的所有文档,而该逻辑使用过滤器表达更合适。由过滤器得到的所有文档的_score都是1。function_score会接受一个查询或是一个过滤器。如果什么都没有指定,那么默认使用的是match_all查询。
函数(Functions)
functions数组用来指定一系列需要适用的函数。数组中的每个函数还能够接受一个可选的过滤器,只有满足了该过滤器要求的文档才会被函数适用。上例中,对所有匹配的文档,weight被设为1(对泳池而言是2)。
score_mode
每个函数都会返回一个结果,我们需要某种方法将多个结果归约成一个,然后将它合并到原始的_score中去。score_mode参数指定了该归约操作,它可以取下面的值:
- multiply: 函数结果会相乘(默认行为)
- sum:函数结果会累加
- avg:得到所有函数结果的平均值
- max:得到最大的函数结果
- min:得到最小的函数结果
- first:只使用第一个函数的结果,该函数可以有过滤器,也可以没有
上例中,我们希望对每个函数的结果进行相加来得到最终的分值,因此使用的是score_mode的sum累加。
没有匹配任何过滤器的文档会保留它们原本的_score,即为1。
随机分值计算(Random Scoring)
你可能会好奇什么是随机分值计算,或者为何要使用它。前面的例子提供了一个较好的用例。该例子的所有结果的最终_score是1,2,3,4或5。也许只有很少的度假酒店能够拥有5分,但我们可以假定会有很多酒店的分值为2或3。
作为一个网站的拥有者,你希望给你的广告投放商尽可能多的机会来展示他们的内容。使用当前的查询,拥有相同的_score的结果每次的返回顺序都是相同的。此时引入一定程度的随机性会更好,来保证拥有相同分值的文档都能有同等的展示机会。
我们希望每个用户都能看到一个不同的随机顺序,但是对于相同的用户,当他点击第二页,第三页或者后续页面时,看到的顺序应该是相同的。这就是所谓的一致性随机(Consistently Random)。
random_score函数,它的输出是一个介于0到1之间的数字,当给它提供相同的seed值时,它能够产生一致性随机的结果,这个seed值可以是用户的会话(Session)ID:
GET /_search
{
"query": {
"function_score": {
"filter": {
"term": { "city": "Barcelona" }
},
"functions": [
{
"filter": { "term": { "features": "wifi" }},
"weight": 1
},
{
"filter": { "term": { "features": "garden" }},
"weight": 1
},
{
"filter": { "term": { "features": "pool" }},
"weight": 2
},
{
"random_score": {
"seed": "the users session id"
}
}
],
"score_mode": "sum",
}
}
}
random_score子句不包含任何的filter,因此它适用于所有文档。
当然,如果你索引了能匹配查询的新文档,无论你是否使用了一致性随机,结果的顺序都会有所改变。
相关推荐
elasticsearch-7.4.0-windows-x86_64.zip ES全文搜索引擎 windows安装包
最新版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-...
最新版windows elasticsearch-8.0.0-windows-x86_64.zip
Elasticsearch是一个开源的全文搜索引擎,它基于Lucene构建,被广泛用于实时数据分析、日志聚合、搜索引擎等场景。在Linux环境下,Elasticsearch的安装和管理是一项基础但至关重要的任务。最新版的Elasticsearch为...
在本例中,我们关注的是 Elasticsearch 的特定版本——7.4.2,针对 Linux x86_64 架构的压缩包“elasticsearch-7.4.2-linux-x86_64.tar.gz”。 首先,让我们深入了解 Elasticsearch 的核心概念和功能: 1. 分布式...
Elasticsearch(elasticsearch-7.17.0-x86_64.rpm 适用于rpm x86_64 )是一个高度可扩展的开源全文本搜索和分析引擎。它使您可以快速,近乎实时地存储,搜索和分析大量数据。它通常用作支持具有复杂搜索功能和要求的...
Elasticsearch(elasticsearch-8.2.0-windows-x86_64.zip),适用于Windows x86_64:它是一个高度可扩展的开源全文本搜索和分析引擎。它使您可以快速,近乎实时地存储,搜索和分析大量数据。它通常用作支持具有复杂...
最新版linux elasticsearch-7.7.0-linux-x86_64.tar.gz
5. 修改配置文件`/usr/local/elasticsearch/config/elasticsearch.yml`,设置数据目录和其他必要参数。 6. 初始化Elasticsearch的系统服务,创建软链接或使用systemd管理。 7. 启动Elasticsearch服务:`systemctl ...
4. 修改配置:在`config/elasticsearch.yml`文件中,你可以根据需求配置集群名称、网络绑定地址、端口等参数。 5. 初始化权限:确保Elasticsearch的数据目录拥有正确的权限,通常设置为elasticsearch用户或运行...
- **类型(Type)**:在Elasticsearch 7.x及以后版本中已被废弃,之前用作索引内部的分类。 - **映射(Mapping)**:定义字段的数据类型和分析规则。 - **分片(Shard)**:索引被分成多个分片,可以分布在不同节点上,...
这个版本在Elasticsearch的发展历程中具有重要的地位,因为它提供了多项性能优化和新功能。 1. **版本介绍**: Elasticsearch 7.9.0是Elasticsearch的一个稳定版本,它引入了对Java 11的支持,并修复了许多已知...
- 查询DSL:Elasticsearch使用JSON格式的查询语句,支持全文搜索、布尔查询、短语匹配、模糊查询等多种复杂查询。 - 倒排索引:Elasticsearch采用倒排索引机制,快速响应搜索请求。 - 分词器:预定义和自定义分词...
在Linux环境中部署和使用Elasticsearch 7.9.2是许多IT专业人士的重要任务。这个版本提供了许多性能改进和新特性,以增强搜索、分析和监控能力。 1. **安装步骤**: - 首先,下载`elasticsearch-7.9.2-linux-x86_64...
elasticsearch-7.4.0-linux-x86_64.tar.gz,来自官网。需下载以下两个文件后自行合并 elasticsearch-7.4.0-linux-x86_64.tar.gz.001 elasticsearch-7.4.0-linux-x86_64.tar.gz.002
Elasticsearch是一个开源的全文搜索引擎,它以其高效、可扩展性和灵活性而闻名。在Windows平台上,Elasticsearch的8.2.0版本是为64位操作系统设计的,提供了强大的搜索和数据分析功能。这个压缩包“elasticsearch-...
最新版windows elasticsearch-7.7.0-windows-x86_64.zip 含教材和ik分词器
Elasticsearch是一个开源的全文搜索引擎,它以其高效、可扩展和实时性著称。这个"最新版linux elasticsearch-7.17.1-linux-x86_64.tar.gz"文件是为Linux平台设计的Elasticsearch 7.17.1版本的二进制发行版,适用于64...
这里我们将深入探讨Elasticsearch 7.7.0版本的相关知识点。 首先,Elasticsearch 7.7.0是Elasticsearch的一个稳定版本,它在功能和性能上都有所提升。此版本包含了对查询优化、性能改进、错误修复以及新特性的引入...