1

我有一个包含 5000 万种产品的清单。每个产品都有一个包含 200 项功能的列表。我希望通过匹配在 200 个功能中具有最大重叠的产品功能来找到类似的产品。

目前我将 200 个单词与空格连接起来并形成一个长字符串。当我想为特定的选定产品查找类似产品时,我检索存储的 200 字长字符串并搜索 elasticsearch。

这给出了预期的结果,但每次搜索大约需要 7 秒左右。那是因为搜索短语太长了。有没有更好的方法来做到这一点并找到弹性的最佳重叠?

4

1 回答 1

0

我建议您检查/尝试几件事:

我有一个包含 5000 万种产品的清单。每个产品都有一个包含 200 项功能的列表。我希望通过匹配在 200 个功能中具有最大重叠的产品功能来找到类似的产品。目前我将 200 个单词与空格连接起来并形成一个长字符串。

假设 Product 是 Doc 类型,您可以尝试将其保存为值数组并在其上启用字段数据。然后很容易使用聚合对它们进行分组,应用正确提到的最大重叠并得到你想要的。我坚信它会快得多。

我检索存储的 200 字长字符串并搜索弹性搜索。

可能在某些情况下,您想要的只是聚合结果,而不是所有产品或其他文档类型的完整响应,在这种情况下,将搜索类型设置为 count(较旧版本)或 query_then_fetch 大小为 0(较新版本),您可以避免初始获取所有文档类型并仅获取聚合,这可以根据您的要求在某些情况下使用。

确保您已准备好 elasticsearch 环境

最后,有了这么多文档,您就有机会找到一些比默认配置更适合您的情况的分片/副本配置。

于 2017-01-11T19:47:55.440 回答