Elasticsearch:完全禁用IDF以获得搜索结果评分

时间:2016-02-05 14:13:42

标签: java elasticsearch tf-idf

这是我在elasticsearch中的样本数据

{
    "_index": "12_index",
    "_type": "skill_strings",
    "_id": "AVKv-kM4axmY3fECZw9T",
    "_source": {
       "str": "PHP PHP PHP"
    }
 },
 {
    "_index": "12_index",
    "_type": "skill_strings",
    "_id": "AVKv-kNfaxmY3fECZw9U",
    "_source": {
       "str": "Javascript PHP Javascript Javascript"
    }
 }


"bool":{
  "must":[
    // some conditions
    {"match_phrase":{"str":"php"}}
  ],
  "should":[
    {"match_phrase":{"sentences":"Javascript"}}
  ]
}

规范是禁用

在结果集中,php(有16次出现)得分为13.65(四舍五入)而在另一个doc中出现次数相同的Javascript得分低于9.58

根据我的使用案例,无论一个单词的罕见程度或该字段的短/长程度如何,我希望相同的术语频率具有相同的分数。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

如果您真的希望第一个文档为str:php评分3.0(在评分​​标准化之前),而第二个文档也为str:Javascript评分3.0(在评分​​标准化之前),那么[你应该查看script_score] [1]并使用[tf()函数] [2]。

这将完全绕过(1)长度标准化,(2)任何对“稀有”(idf)的考虑,以及(3)(tf)的任何归一化