elasticsearch,morelikethis,Lucene,elasticsearch,Morelikethis" /> elasticsearch,morelikethis,Lucene,elasticsearch,Morelikethis" />

Lucene 如何在Elasticsearch中始终推荐不同的文档(文件)

Lucene 如何在Elasticsearch中始终推荐不同的文档(文件),lucene,elasticsearch,morelikethis,Lucene,elasticsearch,Morelikethis,我有一项服务,可以推荐与用户当前上下文相关的文档(文件)。它将ElasticSearch与过滤器结合使用(参见下面的查询)。这些文档由用户上传,如果是公开的,则可以向其他用户推荐。它工作正常,但当两个或多个用户上传相同的文件时就会出现问题。elasticsearch中有两个或多个相同文档的实例,很可能会推荐两个(甚至更多)文件 有人知道我如何强制ElasticSearch忽略这些重复项并只返回同一文件的一个实例吗 POST _search { "query": { "filtered":

我有一项服务,可以推荐与用户当前上下文相关的文档(文件)。它将ElasticSearch与过滤器结合使用(参见下面的查询)。这些文档由用户上传,如果是公开的,则可以向其他用户推荐。它工作正常,但当两个或多个用户上传相同的文件时就会出现问题。elasticsearch中有两个或多个相同文档的实例,很可能会推荐两个(甚至更多)文件

有人知道我如何强制ElasticSearch忽略这些重复项并只返回同一文件的一个实例吗

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将不同,因此我将再次推荐同一本书的两个实例。在你的情况下,这更可能是正确的方向。你能找到解决办法吗?我仍然认为我的回答符合你的问题。您需要一个“重复”字段