为什么我的所有ElasticSearch更像是这样的点击得分为零?

时间:2016-05-04 02:01:50

标签: morelikethis elasticsearch-2.0

我有很多新闻文章,我正在编制索引。我希望避免索引很多几乎相同的文章(例如,来自新闻服务的文章可能会出现多次,日期格式略有不同)。

所以我想我会对每篇文章做一个更像是这样的查询。如果我得到一个得分>一些截止,然后我认为文章已经编入索引,我不会为此烦恼。

但是当我运行我更喜欢这个查询时,我得到的所有命中都会得到零分。如果我做错了,或者我发现了一个错误,我无法判断这是否有所期待。

我的查询如下:

POST _search
{"query": 
  {"bool": 
    {"filter": [
      {"more_like_this": 
        {"fields": ["text"], 
         "like": "Doctor Sentenced In $3.1M Health Care Fraud Scheme  Justice Department Documents & Publications \nGreenbelt, Maryland - U.S. District Judge Deborah K. Chasanow sentenced physician [snip]"
        }
      }
    ]
  }
}

我得到的结果是:

{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 390,
    "max_score": 0,
    "hits": [
      [snip]

3 个答案:

答案 0 :(得分:0)

今天我遇到了类似的问题,more_like_this查询没有将结果返回给我。因为我使用的是非默认路由而没有传递_routing

我的查询如下所示,我必须在文档字段articledefault_11的{​​{1}}索引中的keywords中进行搜索。

contents

另请注意传递GET localhost:9200/alias_default/articles/_search { "more_like_this": { "fields": [ "keywords", "contents" ], "like": { "_index": "default_11", "_type": "articles", "_routing": "6", "_id": "1000000000006000000000000000014" }, "min_word_length": 2, "min_term_freq": 2 } } 参数。

_routing

请参阅:ElasticSearch returns document in search but not in GET

答案 1 :(得分:0)

原因是您在过滤器查询中有MLT查询。筛选查询始终返回零分。将您的MLT置于必须或应该查询中,您将获得分数。

答案 2 :(得分:0)

您得分为零,因为Bool运算符的Filter部分未包含在得分计算中。它仅用于过滤结果。您应该使用MUST运算符来获得分数。

POST _search
{"query": 
  {"bool": 
    {"must": [
      {"more_like_this": 
        {"fields": ["text"], 
         "like": "Doctor Sentenced In $3.1M Health Care Fraud Scheme  Justice Department Documents & Publications \nGreenbelt, Maryland - U.S. District Judge Deborah K. Chasanow sentenced physician [snip]"
        }
      }
    ]
  }
}

有关详细信息,请参阅文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html