ElasticSearch——根据字段值提高相关性

2024-02-08

需要在 ElasticSearch 中找到一种方法来根据字段的特定值提高文档的相关性。具体来说,我的所有文档中有一个特殊字段,该字段值越高,包含该字段的文档就越相关,无论搜索如何。

考虑以下文档结构:

{
    "_all" : {"enabled" : "true"},
    "properties" : {
        "_id":            {"type" : "string",  "store" : "yes", "index" : "not_analyzed"},
        "first_name":     {"type" : "string",  "store" : "yes", "index" : "yes"},
        "last_name":      {"type" : "string",  "store" : "yes", "index" : "yes"},
        "boosting_field": {"type" : "integer", "store" : "yes", "index" : "yes"}
        }
}

我希望具有较高 boosting_field 值的文档本质上更相关比那些具有较低 boosting_field 值的。这只是一个起点——在确定搜索中每个文档的最终相关性得分时,还将考虑查询和其他字段之间的匹配。但,在其他条件相同的情况下,增强场越高,文档的相关性就越高.

有人知道如何做到这一点吗?

多谢!


您可以在索引时或查询时进行提升。我通常更喜欢查询时间提升,即使它使查询速度稍微慢一些,否则每次我想要更改提升因子时都需要重新索引,这通常需要微调并且需要非常灵活。

使用elasticsearch查询DSL来应用查询时间提升有多种不同的方法:

  • 增强查询 http://www.elasticsearch.org/guide/reference/query-dsl/boosting-query.html
  • 自定义过滤器分数查询 http://www.elasticsearch.org/guide/reference/query-dsl/custom-filters-score-query.html
  • 自定义提升因子查询 http://www.elasticsearch.org/guide/reference/query-dsl/custom-boost-factor-query.html
  • 自定义分数查询 http://www.elasticsearch.org/guide/reference/query-dsl/custom-score-query.html

如果您想对与特定查询或过滤器匹配的文档进行特定提升,前三个查询非常有用。例如,如果您只想提升上个月发布的文档。您可以在 boosting_field 中使用这种方法,但是您需要手动定义一些 boosting_field 间隔并给它们不同的提升,这并不是很好。

最好的解决方案是使用自定义分数查询 http://www.elasticsearch.org/guide/reference/query-dsl/custom-score-query.html,它允许您使用脚本进行查询并自定义其分数。功能相当强大,通过脚本可以直接修改乐谱本身。首先,我会将 boosting_field 值缩放为 0 到 1 之间的值,这样你的最终分数就不会变成一个很大的数字。为此,您需要预测该字段可以包含的最小值和最大值。例如,最小值为 0,最大值为 100000。如果将 boosting_field 值缩放为 0 到 1 之间的数字,则可以将结果添加到实际分数中,如下所示:

{
    "query" : {
        "custom_score" : {
            "query" : {
                "match_all" : {}
            },
            "script" : "_score + (1 * doc.boosting_field.doubleValue / 100000)"
        }
    }
}

您还可以考虑使用 boosting_field 作为增强因子(_score *而不是_score +),但随后您需要将其缩放到最小值为 1 的区间(只需添加 +1)。

您甚至可以调整结果,以改变其重要性,为您用来影响分数的值添加权重。如果您需要将多个提升因素组合在一起以便赋予它们不同的权重,您将更需要这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElasticSearch——根据字段值提高相关性 的相关文章

  • 在Windows Xampp上安装和使用elasticsearch php客户端

    我下载的是elasticsearch 5 1 1 zip来自https www elastic co downloads elasticsearch https www elastic co downloads elasticsearch
  • Android 搜索界面未提交查询

    我按照官方教程实现了一个搜索界面 搜索小部件 搜索界面 http developer android com training search setup html密切 一切看起来都不错 但我无法提交搜索查询 当我单击键盘上的 发送 按钮时
  • ElasticCloud 的 ElasticSearch 身份验证错误?

    我刚刚在 ElasticCloud 上设置了一个新的 ElasticSearch 集群 我正在尝试遵循帮助文档 https cloud elastic co help 它说您可以按如下方式发布文档 curl https
  • search_after 在弹性搜索中如何工作?

    我一直在尝试在我们的应用程序中使用 Elasticsearch 但分页限制为 10k 对我们来说实际上是一个问题 并且由于必须超时问题 滚动 API 也不是推荐的选择 我发现 Elasticsearch 有一个叫做 search after
  • Elasticsearch 关于“空索引”的查询

    在我的应用程序中 我使用了几个elasticsearch索引 它们在初始状态下不包含索引文档 我认为这可以称为 空 该文档的映射是正确且有效的 该应用程序还有一个包含实体的关系数据库 这些实体可能具有在 elasticsearch 中关联的
  • Elasticsearch - 使用“标签”索引来发现给定字符串中的所有标签

    我有一个 elasticsearch v2 x 集群 其 标签 索引包含大约 5000 个标签 tagName tagID 给定一个字符串 是否可以查询标签索引以获取在该字符串中找到的所有标签 我不仅想要精确匹配 而且还希望能够控制模糊匹配
  • ElasticSearch 映射对分组文档进行折叠/执行操作的结果

    有一个对话列表 每个对话都有一个消息列表 每条消息都有不同的字段和action场地 我们需要考虑到在对话的第一条消息中使用了动作A 在几条消息之后有使用的动作A 1过了一会儿A 1 1等等 有一个聊天机器人意图列表 对对话的消息操作进行分组
  • Elasticsearch:根据类型对不同字段进行排序

    我的索引中有两种类型 Event and City 我正在尝试按日期将它们全部排序 但是 每种类型的日期字段名称都不同 为了Event该值是在updated at领域和City日期是在update at其嵌套对象之一中的字段city eve
  • 即使禁用安全性,OAuth 令牌 API 也无法在 Elastic Search 中工作

    我是 Elastic search 新手 使用 Elastic search 版本 7 7 1 我想通过以下方式生成 OAuth 令牌弹性搜索文档 https www elastic co guide en elasticsearch re
  • Elastic Search 启动错误 - “\Common 此时出现意外。”

    我已经下载并解压了elasticsearch 当我运行批处理文件 elasticsearch bat 时 出现以下错误 Common was unexpected at this time Solved 通过编辑 bat 文件的第 46 行
  • Elastic Search 索引经常被删除[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在 google cloud 上对个人项目运行弹性搜索 并将其用作我的应用程序的搜索索引 从最近三天开始 索引就被神秘地删除了 我不知
  • 以编程方式在 App Store 上运行搜索?

    是否可以从我的应用程序中打开 App Store 应用程序并运行搜索 我想看看是否有一个 appstore 类型的 URL 可以使用 就像 mailto 和 sms 分别打开邮件和短信一样 有谁知道这是否可能 编辑 更多信息 我一直在尝试使
  • 适用于elasticsearch 7.0.1 和 kibana 7.0.1 的 docker-compose.yml

    我在 Windows 10 上将 Docker Desktop 与 Linux 容器结合使用 并希望通过 docker compose 文件启动最新版本的 elasticsearch 和 kibana 容器 使用 6 2 4 等旧版本时一切
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 在elasticsearch中转义特殊字符

    我正在使用Elasticsearch python 客户端 https elasticsearch py readthedocs io en master 对我们托管的 elasticsearch 实例进行一些查询 我注意到一些字符需要转义
  • 我可以在 ids 过滤器或一般查询子句中指定的值数量的最大限制?

    在elasticsearch中指定可以执行匹配的值数量的最大限制是多少 我在某处读到它是 1024 但也是可配置的 真的吗 它如何影响性能 curl XPOST localhost 9200 my index search pretty d
  • 连接所有 PostgreSQL 表并创建 Python 字典

    我需要加入allPostgreSQL 表并将它们转换为 Python 字典 数据库中有72张表 总列数大于1600 我编写了一个简单的 Python 脚本 该脚本连接多个表 但由于以下原因无法连接所有表内存错误 https gist git
  • jQuery Mobile 数据过滤器,以防没有结果

    我目前正在探索 jQuery Mobile 以开发带有订单跟踪信息的移动版仪表板 计划是使用一个包含所有订单的简单无序列表 人们可以单击他们想了解更多信息的链接 由于此列表可能会变得相当大 因此拥有过滤功能非常好 使用 jQuery Mob
  • Android SearchView 在启动时隐藏键盘

    我有一个小问题正在尝试解决 当我打开应用程序时 键盘会显示输入搜索视图的查询 不过 我只想在单击搜索视图时显示键盘 我该如何解决 Thanks 这对我有用 用于隐藏焦点的代码 searchView SearchView view findV
  • 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

    我正在考虑向 Meteor 应用程序添加全文搜索 我知道 MongoDB 现在支持此功能 但我对实现有一些疑问 启用文本搜索功能的最佳方法是什么 textSearchEnabled true 在 Meteor 应用程序中 有没有办法添加索引

随机推荐

  • Scapy生成STP(生成树协议)数据包

    我正在尝试生成STP数据包并使用wireshark捕获它 基本上我所做的是 gt gt gt 从Scapy发送 STP wireshark的结果是 53918 2671 938356000 00 00 00 00 00 00 FC 49 格
  • 启用 NoResize 模式时最小化窗口

    我有一个 WPF 应用程序 其中Window财产ResizeMode设置为NoResize 因此最大化和最小化按钮被隐藏 有没有办法添加最小化按钮 因为我不想允许用户仅调整窗口大小以避免表单上的控件变形 但最小化窗口是一个有用的功能 Set
  • 如何让按钮在div中居中?

    我有一个宽度为 100 的 div 我想在其中放置一个按钮 我该怎么做 div style width 100 height 100 border 1px solid div
  • 隐藏标题页上的幻灯片编号

    我在用 Reveal initialize slideNumber true 是否有可能隐藏标题页上的幻灯片编号 我是这样做的 Reveal addEventListener slidechanged event gt const isFi
  • 标签内的图像
  • 我有一个关于内部浮动元素的问题 li tag 我有以下标记 li li img src concept truck jpg alt 2013 Toyota Tacoma p 2013 Toyota Tacoma p p Price 4500
  • 无法获取 Flask 应用程序中设置的环境变量

    我尝试在 CentOS 中将敏感信息设置为环境变量 并将它们传递给主文件中使用的 Flask 配置文件 即init py 但这没有用 Flask 应用程序在 Apache 下运行 我首先以 root 用户身份编辑 etc environme
  • 使用 LLVM C API 生成对内部函数的调用

    我正在编写一些使用 LLVM C API 的代码 如何使用内在函数 例如llvm cos f64 or llvm sadd with overflow i32 每当我尝试通过生成一个全局来做到这一点LLVMAddGlobal 具有正确的类型
  • 如何使用ExternalTask​​Sensor触发Airflow DAG独立运行

    我构建了两个 DAG dag a dag b 并在 dag b 中创建了一个刺探 dag a 的ExternalTask Sensor 这些 DAG 有两个用例 同时调度dag a和dag b 并使用依赖关系先处理dag a 然后处理dag
  • SwiftUI 2 弹出到根视图,没有场景委托

    我想在用户注销时刷新根视图 但我找不到如何在新的无场景 SwiftUi 2 下执行此操作 Next is 瑞士马克 https stackoverflow com questions 63461933 swiftui how to chan
  • 将纬度和经度转换为十进制值

    我的 GPS 信息以以下形式呈现 北纬 36 57 9 西经 110 4 21 我可以使用Chris Veness 的 javascript 函数 http www movable type co uk scripts latlong ht
  • Golang,goroutines:恐慌:运行时错误:无效的内存地址

    我对 golang 相当陌生 并试图理解主要原理并使用通道编写基于 gouroutines 的代码 在我使用的其他语言中没有这样的工具 我想知道是否会出现诸如恐慌之类的错误 我的代码 package main import fmt impo
  • jQuery getJSON 不适用于已删除的抽搐频道

    我正在尝试制作一个抽搐频道列表 显示谁在线 离线 并显示该人已删除该帐户的消息 问题是 如果人员帐户不再存在 即使请求返回带有几个属性的 JSON 文件 getJSON 方法内部也不会起作用 代码笔 http codepen io Zach
  • 使用 C# 测量 TCP 上的数据传输速率

    我想测量当前的下载速度 我正在通过 TCP 发送巨大的文件 我怎样才能捕获每秒的传输速率 如果我使用 IPv4InterfaceStatistics 或类似方法 我将捕获设备传输速率 而不是捕获文件传输速率 捕获设备传输速率的问题在于 它捕
  • 自连接查询

    考虑下表 mysql gt select from phone numbers number type person id 17182225465 home 1 19172225465 cell 1 12129876543 home 2 1
  • android中ListView无法点击?

    我使用联系人同步制作了一个应用程序 我列出了以下联系信息 包括照片 姓名和电话号码 我成功地在自定义中列出了所有这些内容ListView 但我无法点击ListView 看起来像是被锁定了 无法点击 但我对另一项活动做了同样的程序 使用自定义
  • 在 LINQ 中对集合的集合进行交集

    我有一个要相交的列表列表 List
  • Hibernate JPA ManyToOne 复合键

    我正在尝试设置我的实体以允许 pks 我的数据库由两个字段组成 Dealer detail id pk user detail id pk 两者都根据相应表中的 id 进行连接 到目前为止我已经尝试过但没有成功 Embeddable pub
  • Git Pull 请求没有更改,但 git diff 显示更改

    我的分支机构有问题 介绍 我的项目有 3 个分支 Dev Main 和 Staging On Dev分支我们添加新功能 Main我们修复错误的分支Staging我们部署用于测试 当 Bug PullRequest 完成时Main分支 我们发
  • 使用 VSTS 和 Azure 时正确管理应用程序设置

    如果使用 VSTS 和 Azure 有两种不同的方法来管理应用程序设置 请记住 这只是用于持续部署的工具的示例 您可以覆盖 VSTS 中 CD 管道中的 JSON 文件 旧系统中的 Web 配置 也可以覆盖 Azure 应用程序设置 部分中
  • ElasticSearch——根据字段值提高相关性

    需要在 ElasticSearch 中找到一种方法来根据字段的特定值提高文档的相关性 具体来说 我的所有文档中有一个特殊字段 该字段值越高 包含该字段的文档就越相关 无论搜索如何 考虑以下文档结构 all enabled true prop