首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何像其他搜索引擎一样在弹性搜索DSL查询中省略类似的结果?

如何像其他搜索引擎一样在弹性搜索DSL查询中省略类似的结果?
EN

Stack Overflow用户
提问于 2021-04-25 16:19:23
回答 2查看 465关注 0票数 2

我使用ElasticSearch存储一些文档来创建搜索引擎,一切都很完美。

我们可以在弹性云中存储类似的文档。

我可以看到一些搜索引擎忽略了类似的数据,比如Google

在Google结果的底部查看这条消息:

我需要准确地实现这一点,我想知道是否有任何方法可以使用ElasticSearch在查询结果中省略类似的文档,并给用户一个他想要查看所有结果或不想看到的选项?

有什么建议吗?

更新

我决定增加更多的信息来表明这一点。以下是这两份文件:

Node.js是建立在Chrome的V8 JavaScript引擎上的JavaScript运行时。Node.js是一个建立在Chrome的V8 JavaScript引擎上的平台。

在我的弹性指数中有很多这样的文件。如何在DSL查询中省略相似的内容而只显示其中的一个?

是否有任何方法来实现这一点,或者需要AI,ML,以及诸如此类的东西来实现?

EN

回答 2

Stack Overflow用户

发布于 2021-04-28 16:12:22

可以使用折叠参数根据字段值折叠搜索结果--例如,下面的搜索按user.id折叠结果,并按http.response.bytes对结果进行排序。

代码语言:javascript
复制
GET /my-index-000001/_search
{
  "query": {
    "match": {
      "message": "GET /search"
    }
  },
  "collapse": {
    "field": "user.id"                
  },
  "sort": [ "http.response.bytes" ],  
  "from": 10                          
}

有关更多信息,您可以查看弹性官方文档这里

票数 -2
EN

Stack Overflow用户

发布于 2021-04-28 16:35:48

为了解决你的问题,你需要定义什么是你所说的“相似”。

谷歌对此有一个自定义定义,适用于网页。这个定义是基于域名--你知道,不是被一个领域的结果淹没,而是基于内容--谷歌排名低。

您需要定义一个特定于文档的度量标准。它通常基于一个特定的属性,即行列式字段。你的决定因素是什么-你知道的。如果你有一个论坛引擎,topicID是一个很好的选择。如果您有一个产品目录,叶子categoryID将是最好的。

实现这一目标有两种方法。

  1. 塌陷

这正是你想要的。您可以在文档中定义行列式字段,也可以定义要显示的细节,等等。ElasticSearch文档为您提供了许多提示。

这将给你准确的结果,不管你有多少碎片,虽然这是一个更重的操作。

  1. 聚合+抽样

在此解决方案中,您将创建一个聚合,并使用一个取样器为您选择一些示例文档。就像这样:

代码语言:javascript
复制
    "aggregations": {
        "sample": {
            "diversified_sampler": {
                "field": "topicId",
                "shard_size": 200,
                "max_docs_per_value": 1
            },

该解决方案速度更快,因为与collapse不同,它不为所有组发出子查询。缺点是,当使用多个碎片时,此解决方案可能并不准确。另外,您不能指定取样器的顺序-它总是根据相关性工作。

对于比较ElasticSearch论坛上的两种方法,有一个有趣的讨论,值得一读。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67255631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档