首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多指标的弹性搜索评分

多指标的弹性搜索评分
EN

Stack Overflow用户
提问于 2015-10-30 09:28:31
回答 2查看 4.1K关注 0票数 6

我有一个任何季度的指数(“指数-2015.1”,“指数-2015.2”).)

我在每个索引上有大约3000万份文件。

文档有一个文本字段(“标题”)

我的文档排序方法是(1)_score (2)创建日期

问题是:

当为所有索引(" index -201*")在'title‘字段上搜索一些文本时,第一个结果总是来自一个索引。

如果我搜索的是' title=home‘,并且我有10k个关于“title=home -2015.1”的文档和10k个title=home的"index-2015.2“的文档,那么第一个结果就是来自"index-2015.1”的所有文档(而不是来自"index-2015.2",或者是混合的),即使是在"index-2015.2“上,也有”创建日期“高于"index-2015.1”中的文档。

这有什么原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-30 13:25:53

原因可能是,分数是特定于指数的。因此,如果您确实有多个索引,那么对于每个索引,文档的结果评分将被计算(略有不同)。

简单地说,除其他外,匹配文档的得分取决于查询项及其在索引中的出现情况。分数是根据索引计算的(实际上,在默认情况下,甚至对每个单独的碎片)。elasticsearch有一些规范,但我不知道这些细节。

我不能很好地解释,但这是关于得分的文章。我想你至少要读一读关于TF/国防军的那部分。我想这应该能解释你为什么会得到不同的分数。

https://www.elastic.co/guide/en/elasticsearch/guide/current/scoring-theory.html

编辑:

因此,在我的机器上测试它之后,似乎可以使用另一个search_type,以达到适合您的情况的分数。

代码语言:javascript
运行
复制
POST /index1,index2/_search?search_type=dfs_query_then_fetch
{
    "query" : {
       "match": {
          "title": "home"
       }
    }
}

重要的部分是search_type=dfs_query_then_fetch.如果您正在编写java或类似的程序,那么应该有一种方法在请求中指定它。有关search_types的详细信息,请参阅文档

基本上,它将首先收集所有受影响的碎片(+索引)的术语频率。因此,分数应该被概括为所有这些。

票数 13
EN

Stack Overflow用户

发布于 2015-11-01 07:30:10

根据Andrei Stefan和Slomo的说法,指数推高解决了我的问题:

代码语言:javascript
运行
复制
   body={ 
       "indices_boost" : { "index-2015.4" : 1.4, "index-2015.3" : 1.3,"index-2015.2" : 1.2 ,"index-2015.1" : 1.1 }
        }

编辑:

使用search_type=dfs_query_then_fetch (如Slomo所述)将以更好的方式解决问题(取决于您的业务模型是什么.)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33432639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档