【发布时间】:2018-11-11 03:37:01
【问题描述】:
实际应用:
我有几个数据库需要从一个搜索框中进行查询。其中一些我可以直接访问(它们是 SQL Server / MySQL),另一些我只能通过 API 进行搜索。
在理想情况下,我会将所有这些数据注入 Elasticsearch 并使用它来确定相关性。不幸的是,我在本地没有资源来使其高效运行。 Elastic 在空闲时占用了超过 400mb 的 RAM,而无需添加任何实际数据或运行查询。看起来大多数在生产中使用 Elasticsearch 的人都在运行具有 32GB 到 64GB 内存的机器。我的组织无法访问任何可用于该项目的强大功能。
所以我的下一个想法是在用户进行搜索时查询所有数据库并连接到 API。然后我需要分析结果,确定相关性,并将它们返回给用户。我认识到这在性能方面可能是一个糟糕的计划。我希望使用 memcached 让事情变得更容易忍受。
在我寻找算法以确定相关性的研究中,我遇到了 tf-idf。我希望将其应用于从所有数据库返回的结果。
实际问题
我对 tf-idf 的理解是,在对语料库中的每个文档进行标记后,您执行词频分析,然后将其与单词的逆文档频率相乘。逆文档频率是通过将总文档数除以包含该术语的文档总数来计算的。
问题在于,如果我从 API 中提取文档,我不知道语料库中文档的真实总数。我只提取了一个子集,并且根据提取这些文档的方式,它们自然会涉及其中的所有术语。我仍然可以通过将这些不同来源返回的文档池视为单个语料库来应用 tf-idf 吗?解决这个问题的最佳方法是什么?
额外问题
如果您有关于如何在不使用我自己的搜索解决方案或使用 Elasticsearch 的情况下完成此任务的建议,我会全力以赴......
【问题讨论】:
标签: database elasticsearch search tf-idf