Lucene 如何在Elasticsearch中始终推荐不同的文档(文件)
我有一项服务,可以推荐与用户当前上下文相关的文档(文件)。它将ElasticSearch与过滤器结合使用(参见下面的查询)。这些文档由用户上传,如果是公开的,则可以向其他用户推荐。它工作正常,但当两个或多个用户上传相同的文件时就会出现问题。elasticsearch中有两个或多个相同文档的实例,很可能会推荐两个(甚至更多)文件 有人知道我如何强制ElasticSearch忽略这些重复项并只返回同一文件的一个实例吗Lucene 如何在Elasticsearch中始终推荐不同的文档(文件),lucene,
elasticsearch,morelikethis,Lucene,
elasticsearch,Morelikethis,我有一项服务,可以推荐与用户当前上下文相关的文档(文件)。它将ElasticSearch与过滤器结合使用(参见下面的查询)。这些文档由用户上传,如果是公开的,则可以向其他用户推荐。它工作正常,但当两个或多个用户上传相同的文件时就会出现问题。elasticsearch中有两个或多个相同文档的实例,很可能会推荐两个(甚至更多)文件 有人知道我如何强制ElasticSearch忽略这些重复项并只返回同一文件的一个实例吗 POST _search { "query": { "filtered":
POST _search
{
"query": {
"filtered": {
"query": {
"mlt": {
"fields": [
"file"
],
"like_text": "Some sample text here",
"min_term_freq": 1,
"max_query_terms": 1,
"min_doc_freq": 1
}
},
"filter" : {
"or" : {
"filters" : [ {
"term" : {
"visibility" : "public"
}
}, {
"and" : {
"filters" : [ {
"term" : {
"visibility" : "private"
}
}, {
"term" : {
"ownerId" : 2
}
} ]
}
} ]
}
}
}
},
"fields": [
"id","title","visibility", "ownerId","contentType", "dateCreated", "url"]
}
编辑:
我解决了这个问题的第一部分。我使用Tika从网页或文本文档中提取内容。然后,我在类似于查询的文本中使用它来查找最相似的文档,那些值高于0.9的文档被标记为重复。为此,我使用了一个新字段“university”,它具有UUID值。如果要索引的新文档是重复的,我将复制它的“唯一性”值,如果没有重复项,我将为该文档创建新的“唯一性”值
然而,问题的第二部分我仍然没有解决,那就是如何进行查询以消除这些重复项。所以基本上在上面提到的查询中,我必须集成只选择1个具有相同字段“唯一性”值的文档实例的部分
有人知道如何解决这个问题吗?您可以定义一个“重复”字段,在索引过程中可以将值设置为“true”或重复文档的id。然后您可以筛选出这些文档。是。这是一个可能的解决方案,尽管我希望找到一些可以搜索不同文件的解决方案。如果应用了您的建议,那么查找文件副本的最佳方法是什么?使用类似的方法并选择分数接近1.0的结果?这将是一个选项。但如果您的内容完全相同,我建议使用散列(例如MD5)查找副本。这是我的第一个想法,但我担心,如果两个用户上载由不同pdf打印机生成的相同pdf书籍,例如其中一本书中缺少一个字母,那么它将不会给我提供所需的结果。这些文件的MD5将不同,因此我将再次推荐同一本书的两个实例。在你的情况下,这更可能是正确的方向。你能找到解决办法吗?我仍然认为我的回答符合你的问题。您需要一个“重复”字段