Elasticsearch基于内容相似性的固定分数

时间:2013-10-07 19:45:16

标签: ruby-on-rails ruby elasticsearch

我正在开发一种识别类似文档的工具,并将其标记为重复文件。

为此,我使用ElasticSearch检查文档内容,以便ElasticSearch负责管理同步和可能的拼写错误,但是我没有提出能达到目标的查询。

到目前为止,我提出了这个问题:

{
 "query":{
    "filtered":{
       "query":{
          "more_like_this":{
             "fields":[
                "description"
             ],
             "like_text":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
             "min_term_freq":1,
             "max_query_terms":999,
             "min_doc_freq":1
          }
       }
    }
 },
 "from":0,
 "size":999,
 "search_type": "dfs_query_then_fetch",
 "sort":[
    {
       "_score":{
          "order":"desc"
       }
    }
 ]
}

但似乎它给我的分数是随机的,我希望内容完全相等的分数为100,而完全不同的分数则为0。

1 个答案:

答案 0 :(得分:0)

我看到你要去的地方,但开箱即用,得分只与该特定查询相关,因为它全部基于术语频率和位置。因此该分数对于该查询的结果非常好,但从查询到查询无意义。所以,我只需将其包装在一个常数分数查询中。

如果您将每个术语放在自己的查询中,我可以提供一个可能在另一个bool查询中的bool查询中使用多个常量分数来解决此问题的示例。