Elasticsearch有两个类似的功能来获取"类似"文档:
有"更喜欢这个API".它给了我类似于给定文件的文件.我不能在更复杂的表达中使用它.
还有"more_like_this"在Search API中使用的查询我可以在bool或boost表达式中使用它,但我不能给它一个文档的id.我必须提供"like_text"参数.
我有带标签和内容的文件.有些文件会有好的标签,有些则没有.我希望每次都能使用"类似文档"功能,但会将匹配标记的文档排序为高于具有匹配文本的文档.我的想法是:
{
"boosting" : {
"positive" : {
"more_like_this" : {
"fields" : ["tag"],
"id" : "23452",
"min_term_freq" : 1
}
},
"negative" : {
"more_like_this" : {
"fields" : ["tag"],
"id" : "23452",
}
},
"negative_boost" : 0.2
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这并不工作,因为没有"id"在"more_like_this".有哪些替代方案?
如果多个文档具有相同的分数,是否可以实现elasticsearch搜索结果的可靠分页?
我在弹性搜索中尝试自定义评分.我尝试的许多得分表达式产生结果集,其中许多文档具有相同的分数.每次尝试时它们似乎都以相同的顺序出现,但可以保证吗?
AFAIU它不能,特别是如果集群中有多个分片.具有相同分数的文件.给定的elasticsearch查询以随机,非确定性顺序返回,即使基础数据库不发生更改(因此分页不可靠),也可以在同一查询的调用之间进行更改,除非以下其中一项成立:
function_score用来保证每个文档的分数是唯一的(例如,通过使用唯一的数字字段).sort并保证排序定义总顺序(例如,如果其他条件相同则使用唯一字段作为后备).任何人都可以确认(并可能指出一些参考)?
如果我知道只有一个主要分片没有任何副本,这会改变吗(参见其他类似的问题:对于具有相同分数的文档,主/副本的结果排序不一致)?例如,如果我保证有一个分片并且在同一查询的两次调用之间数据库没有变化,那么该查询将以相同的顺序返回结果?
还有什么其他选择(如果有的话)?