有什么方法可以从Elasticsearch查询中删除过于相似的结果

时间:2019-05-20 07:04:32

标签: elasticsearch similarity morelikethis

我正在尝试找到从Elasticsearch _search结果中删除彼此太相似的文档的方法。

我已经检查过has_child,function_score和其他一些弹性功能,但似乎没有一个对我有帮助

GET /document/_search
{
  "query": {
    "term": {
      "tags.name": {
        "value": "sport"
      }
    }
  }
}

例如,我在应用程序中使用上面的查询,该查询返回标签名称中包含sport的所有文档。问题是结果可能包含太多与特定领域相关的文件,例如足球,如果我已经有了与足球相关的文件,那么我想弹性删除以下相似率超过90%的文件。

更新

每个文档都包含标题,摘要,内容和标签列表。例如,我已经有这样的查询来查找与特定文档相似但不太相似的文档。现在我也想从其他Elastisesach查询结果中删除过于相似的文档。

GET /document/_search
{
  "size": 30,
  "query": {
    "bool": {
      "should": [
        {
          "more_like_this": {
            "fields": [
              "content"
            ],
            "like": [
              {
                "_index": "document",
                "_id": 2585099
              }
            ],
            "min_term_freq": 1,
            "boost": 5
          }
        },
        {
          "more_like_this": {
            "fields": [
              "summary",
              "description",
              "title"
            ],
            "like": [
              {
                "_index": "document",
                "_id": 2585099
              }
            ],
            "min_term_freq": 1,
            "boost": 2
          }
        }
      ],
      "must_not": [
        {
          "more_like_this": {
            "fields": [
              "summary",
              "description",
              "title"
            ],
            "like": [
              {
                "_index": "document",
                "_id": 2585099
              }
            ],
            "min_term_freq": 1,
            "boost": 10,
            "minimum_should_match": "70%"
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

0 个答案:

没有答案