我有很多新闻文章,我正在编制索引。我希望避免索引很多几乎相同的文章(例如,来自新闻服务的文章可能会出现多次,日期格式略有不同)。
所以我想我会对每篇文章做一个更像是这样的查询。如果我得到一个得分>一些截止,然后我认为文章已经编入索引,我不会为此烦恼。
但是当我运行我更喜欢这个查询时,我得到的所有命中都会得到零分。如果我做错了,或者我发现了一个错误,我无法判断这是否有所期待。
我的查询如下:
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]
答案 0 :(得分:0)
今天我遇到了类似的问题,more_like_this查询没有将结果返回给我。因为我使用的是非默认路由而没有传递_routing
。
我的查询如下所示,我必须在文档字段article
和default_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
答案 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