我正在一个网站上工作,该网站在搜索后端时使用Solr运行Django。 Haystack是Django与Solr的接口。我目前有一个Solr系列,Apps。每个应用程序都有多个版本,但在Solr中,它们表示为每个应用程序的一个(最新)版本。我遇到了对该架构的限制:我需要能够搜索所有应用程序的版本并返回最相关的版本。
Django ORM中的示例数据:
App Foo
Solr中的搜索示例:为我提供与Windows兼容的所有应用
预期:返回App Foo。
实际:未返回App Foo,因为我们只在Solr中的App Foo文档中存储版本A的元数据。
我所追求的解决方案是基于Release而非App来索引Solr。但是当我们这样做时,我们如何使用Solr / Haystack仅返回与查询匹配的最新版本?
结果分组/字段折叠似乎可以解决问题:http://yonik.com/solr-result-grouping-field-collapsing/根据一个字段中的匹配属性对结果进行分组,并返回前N个结果声音。但是Haystack是否支持它?如果没有,有没有办法将其塞进去?
另一种解决方案可能是使用Solr嵌套文档:http://yonik.com/solr-nested-objects/版本确实是应用程序的子代。 但同样,我发现Haystack并不支持这个功能。此外,嵌套对象的语法是......疯狂。
解决此问题的最佳做法是什么?结果分组还是嵌套对象?这两者之间的区别是什么?你为什么要用一个而不用另一个?
最后,我是否需要撕掉Haystack并使用与Solr不同的界面?
提前致谢!
答案 0 :(得分:0)
如果您可以将原始参数添加到solr查询中,我认为最好的选项是结果在solr中折叠,一旦您将所有版本编入索引,就可以通过app字段折叠,因此它只会返回一个结果。然后,您可以通知崩溃解析器您想要最新的解析器。
fq={!collapse field=app max=timestamp_field}
响应格式相同,因此您不必修改响应解析中的任何内容。