【发布时间】:2023-06-21 00:44:01
【问题描述】:
我正在开发一个使用 Solr 运行 Django 作为搜索后端的网站。 Haystack 用作 Django 到 Solr 的接口。我目前有一个 Solr 集合,Apps。每个应用程序都有多个版本,但在 Solr 中,它们表现为每个应用程序一个(最新)版本。我遇到了该架构的限制:我需要能够搜索应用的所有版本并返回最相关的版本。
Django ORM 中的示例数据:
App Foo
- A 版 - 2017 年 11 月发布,与 Linux 兼容
- 版本 B - 2017 年 4 月发布,与 Windows 兼容
Solr 中的示例搜索:提供与 Windows 兼容的版本的所有应用
预期:返回 App Foo。
实际: App Foo 没有返回,因为我们只将 Release A 的元数据存储在 Solr 中的 App Foo 文档中。
我正在追求的一个解决方案是基于 Release 而不是 App 来索引 Solr。但是当我们这样做时,我们如何使用 Solr/Haystack 只返回与查询匹配的最新版本?
结果分组/字段折叠似乎可以解决问题:http://yonik.com/solr-result-grouping-field-collapsing/ 根据一个字段中的匹配属性对结果进行分组,返回前 N 个结果听起来很正确。但是 Haystack 支持吗?如果没有,有没有办法把它硬塞进去?
另一种解决方案可能是使用 Solr 嵌套文档:http://yonik.com/solr-nested-objects/ Releases 确实是 Apps 的子级。 但同样,我发现 Haystack 不支持此功能。此外,嵌套对象的语法......很疯狂。
解决此问题的最佳做法是什么?结果分组或嵌套对象?两者有什么区别?为什么要使用一个而不是另一个?
最后,我是否将不得不淘汰 Haystack 并使用与 Solr 不同的界面?
提前致谢!
【问题讨论】: