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

ElasticSearch默认评分机制

微生良策
2023-03-14
问题内容

我要寻找的是关于ElasticSearch(Lucene)的默认评分机制实际工作方式的简单明了的解释。我的意思是,它使用Lucene评分,还是使用自己的评分?

例如,我想通过“名称”字段搜索文档。我使用.NET NEST客户端编写查询。让我们考虑这种查询:

IQueryResponse<SomeEntity> queryResult = client.Search<SomeEntity>(s =>
    s.From(0)
   .Size(300)
   .Explain()
   .Query(q => q.Match(a => a.OnField(q.Resolve(f => f.Name)).QueryString("ExampleName")))
);

转换为此类JSON查询:

{
 "from": 0,
 "size": 300,
 "explain": true,
 "query": {
   "match": {
     "Name": {
       "query": "ExampleName"
      }
    }
  }
}

搜索大约有110万个文档。我得到的回报是(这只是结果的一部分,由我自己格式化):

650   "ExampleName" 7,313398

651   "ExampleName" 7,313398

652   "ExampleName" 7,313398

653   "ExampleName" 7,239194

654   "ExampleName" 7,239194

860   "ExampleName of Something" 4,5708737

其中第一个字段只是一个ID,第二个字段是名称字段,ElasticSearch在其上执行搜索,第三个字段是得分。

如您所见,ES索引中有很多重复项。由于找到的一些文档具有不同的分数,尽管它们完全相同(仅具有不同的Id),所以我得出结论,不同碎片对整个数据集的不同部分执行搜索,这使我得出结论,该分数在一定程度上基于总体给定分片中的数据,而不是专门由搜索引擎实际考虑的文档中的数据。

问题是,这个评分到底如何工作?我的意思是,您能告诉我/告诉我/指出我精确的公式来计算ES找到的每个文档的分数吗?最终,如何改变这种评分机制?


问题答案:

默认评分是核心Lucene中的DefaultSimilarity算法,在此处大量记录。您可以通过配置自己的Similarity得分或使用类似custom_score查询的方法自定义得分。

就查询结果及其排序的有效性而言,显示的前五个结果中的奇数分数变化似乎很小,以至于我不太关心它,但是如果您想了解其原因,则explainapi可以显示你到底是怎么回事。



 类似资料:
  • 我使用elasticsearch在我的类型中搜索多个数组字段,看起来像 然后我使用multi\u match查询来获取匹配项 当计算t1的分数时,elasticsearch将字段1、字段2和字段3中的查询分数相加,这正是我想要的。然而,他们的贡献并不相等,字段3对得分的贡献最大,因为“foo”在那里多次出现。 我现在想通过不将所有数组条目的分数相加,而是取最大值来计算每个数组字段中的分数。在我的示

  • 问题内容: 我在Elasticsearch上遇到问题,我不希望对索引项进行分析。但是elasticsearch有一些默认设置,可以在空间上标记它。因此,我的方面查询未返回我想要的结果。 我读到索引类型的属性应该工作。但是问题是我事先不知道我的文档结构。我会在不知道表结构的情况下将随机MySQL数据库索引到elasticsearch。 我如何设置elasticsearch,使其默认情况下会一直使用,

  • 说明 只有订单结束后,才能进行评价 地址URL /v1/common/Comment 支持格式 Json或普通form HTTP请求方式 POST 是否需要登录 是 关于登录授权,参见 如何登录授权 访问授权限制 暂无 请求参数 名称 类型 必选 描述 client_id string yes 申请应用时分配的AppKey access_token string yes 授权后的access to

  • 问题内容: 我有来自Logstash的数据,这些数据正在以过度的方式进行分析。从本质上讲,该领域将被分解成, 和。我知道我可以更改现有数据的映射和重新索引,但是如何更改默认分析器(在ElasticSearch或LogStash中)以避免将来的数据出现此问题? 具体解决方案:在我第一次将数据发送到新集群之前,我为该类型创建了一个映射。 IRC解决方案:创建索引模板 问题答案: 如您所知,当未明确指定

  • 问题内容: 我最近一直在尝试用Elasticsearch在Rails上使用ruby。我在为数据编制索引时遇到麻烦,因此我可以搜索带有复数和非复数关键字的项目。 Tire将允许我为每个映射属性分配一个分析器: 现在,假设我在“测试”标题中有一个关键字 如果我使用查询中的属性进行搜索: http:// localhost:9200 / myindex / mymapping / _search?q =

  • 问题内容: 我正在使用以下方法在ES中创建动态映射: 因此,每当我为具有字段()的文档建立索引时,它都会自动创建具有类型的字段()。因此,每当没有a时,我都会发送一个空字符串,然后引发异常。 有什么办法可以解决这个问题?我可以指定默认值吗? 问题答案: 您可以添加到所有字段,也可以全局设置: 仅字段: 全局设置 :