我使用ElasticSearch存储一些文档来创建搜索引擎,一切都很完美。
我们可以在弹性云中存储类似的文档。
我可以看到一些搜索引擎忽略了类似的数据,比如Google。
在Google结果的底部查看这条消息:

我需要准确地实现这一点,我想知道是否有任何方法可以使用ElasticSearch在查询结果中省略类似的文档,并给用户一个他想要查看所有结果或不想看到的选项?
有什么建议吗?
更新
我决定增加更多的信息来表明这一点。以下是这两份文件:
Node.js是建立在Chrome的V8 JavaScript引擎上的JavaScript运行时。Node.js是一个建立在Chrome的V8 JavaScript引擎上的平台。
在我的弹性指数中有很多这样的文件。如何在DSL查询中省略相似的内容而只显示其中的一个?
是否有任何方法来实现这一点,或者需要AI,ML,以及诸如此类的东西来实现?
发布于 2021-04-28 16:12:22
可以使用折叠参数根据字段值折叠搜索结果--例如,下面的搜索按user.id折叠结果,并按http.response.bytes对结果进行排序。
GET /my-index-000001/_search
{
"query": {
"match": {
"message": "GET /search"
}
},
"collapse": {
"field": "user.id"
},
"sort": [ "http.response.bytes" ],
"from": 10
}有关更多信息,您可以查看弹性官方文档这里。
发布于 2021-04-28 16:35:48
为了解决你的问题,你需要定义什么是你所说的“相似”。
谷歌对此有一个自定义定义,适用于网页。这个定义是基于域名--你知道,不是被一个领域的结果淹没,而是基于内容--谷歌排名低。
您需要定义一个特定于文档的度量标准。它通常基于一个特定的属性,即行列式字段。你的决定因素是什么-你知道的。如果你有一个论坛引擎,topicID是一个很好的选择。如果您有一个产品目录,叶子categoryID将是最好的。
实现这一目标有两种方法。
这正是你想要的。您可以在文档中定义行列式字段,也可以定义要显示的细节,等等。ElasticSearch文档为您提供了许多提示。
这将给你准确的结果,不管你有多少碎片,虽然这是一个更重的操作。
在此解决方案中,您将创建一个聚合,并使用一个取样器为您选择一些示例文档。就像这样:
"aggregations": {
"sample": {
"diversified_sampler": {
"field": "topicId",
"shard_size": 200,
"max_docs_per_value": 1
},该解决方案速度更快,因为与collapse不同,它不为所有组发出子查询。缺点是,当使用多个碎片时,此解决方案可能并不准确。另外,您不能指定取样器的顺序-它总是根据相关性工作。
对于比较ElasticSearch论坛上的两种方法,有一个有趣的讨论,值得一读。
https://stackoverflow.com/questions/67255631
复制相似问题