当前位置: 首页 > 面试题库 >

Elasticsearch-如果词频较高,则得分较高

凌照
2023-03-14
问题内容

我有2个文档,并且正在搜索关键字“ Twitter”。假设两个文档都是带有“标签”字段的博客文章。

文档A在“标签”字段中只有1个术语,即“ Twitter”。文档B在“标签”字段中有100个术语,但其中3个是“ Twitter”。

即使文档B的出现频率较高,“elasticsearch”也会给文档A更高的分数。但是该分数是“稀释的”,因为它具有更多的术语。由于文档B的搜索词频率较高,我如何给它更高的分数?

我知道ElasticSearch / Lucene根据文档中的术语数量执行一些标准化。如何禁用此规范化,以便文档B的得分更高?


问题答案:

正如另一个答案所说,查看单个分片是否具有相同的结果将很有趣。我想您会并且这取决于标签字段的规范,在使用tf /
idf相似度(默认)来计算分数时会考虑到这一点。

实际上,lucene确实考虑了术语频率,换句话说,术语在字段中出现的次数(在您的情况下为1或3),以及倒置的文档频率,换句话说,术语在文档中的使用频率如何索引,以便将其与查询中的其他字词进行比较(如果您要搜索单个字词,则没有任何区别)。

但是还有另一个称为规范的因素,它奖励较短的字段并考虑到最终的索引时间增加,这可以针对每个字段(在映射中)甚至针对每个文档。您可以验证规范是您的结果启用搜索请求中的explain选项并查看explain输出的原因。

我猜,第一个文档仅包含该标签的事实使它比包含该标签的其他文档多次但也包含许多其他标签更为重要。如果您不喜欢这种行为,则可以在标签字段的映射中禁用规范。如果该字段为"index":"analyzed"(默认),则默认情况下应启用它。"index":"not_analyzed"如果您不希望分析标签字段(通常很有意义,但取决于您的数据和域),则可以切换到该字段,也可以"omit_norms": true在标签字段的映射中添加选项。



 类似资料:
  • 问题内容: 我想在elasticsearch中更改评分系统,以摆脱对一个术语的多次出现计数的麻烦。例如,我想要: “德克萨斯州德克萨斯州” 和 “得克萨斯州” 得分相同。我发现elasticsearch表示该映射将禁用词频统计,但是我的搜索结果却不一样: } 任何帮助将不胜感激,我无法找到很多有关此的信息。 编辑: 我正在添加搜索代码,并在使用解释时返回了什么。 我的搜索代码: 当我搜索解释时,我

  • 我正在寻找一种方法来执行更高级的比较,而不是React钩子的第二个参数。 具体而言,我正在寻找更像这样的东西: 关于这一点,我从React文档中错过了什么吗?或者有什么方法可以在已经存在的基础上实现这样的钩子吗? 如果有实现这一点的方法,这就是它的工作原理:第二个参数是一个依赖关系数组,就像来自React的钩子一样,第三个参数是一个带有两个参数的回调:依赖关系数组上一个渲染,以及当前渲染的依赖关系

  • 某头部大厂:十亿条数据如何从数据库下载并合并(假设十亿条数据进行了分库分表,且是分布式环境)? 某头部银行:一亿条数据如何删除其中几千万条(假设一亿条数据都在数据库一张表中,且是单机环境)? 都要求尽可能详细的说出流程和各种细节。 各位牛客大佬有什么好的答案没?

  • 我使用显著性来确定每个规则的优先级,但当我使用所有规则时,它并不总是选择显著性更高的规则。如何使规则引擎始终选择显著性较高的规则? 输出 触发规则的Actionlistener 口水主 规则结构

  • 我试图在elasticsearch查询中使用无痛语言来比较小时数。我想问一下这样的问题: 但我有错误: 无法应用 [ 嵌套文档的方案是: (这些值的格式为“2:00”或“18:00”)。 我尝试过使用< code >。日期 或<代码>。value,但它不起作用,因为我的变量只包含小时而不是日期时间。 有人能帮帮我吗:)

  • 问题内容: 我正在尝试在非常不平衡的数据集上使用LightGBM建立分类器。不平衡率,即: 我使用的参数和训练代码如下所示。 我运行简历来获得最好的模型和最好的回合。我的简历获得了0.994 AUC,并且在验证集中获得了类似的分数。 但是,当我在测试集上进行预测时,我得到的结果非常糟糕。我相信火车是完美采样的。 需要调整哪些参数?问题的原因是什么?我是否应该对数据集重新采样以减少最高等级? 问题答