【问题标题】:Search among one result from each group in Solr在 Solr 中的每个组中搜索一个结果
【发布时间】:2012-02-03 19:08:50
【问题描述】:

我有一个带有版本控制的 Solr 架构。 ID 包含版本号,因此现有文档保持为新的索引。示例内容:

id = foo1
name = foo
version = 1
data = x

id = foo2
name = foo
version = 2
data = y

id = bar1
name = bar
version = 1
data = x

有两种不同的搜索方案:搜索所有版本或仅搜索最新版本。第一个是微不足道的,但是如何在data 字段中仅搜索每个name 的最新版本?在上面的示例中,我希望最近搜索“x”,并希望只找到“bar1”。

我希望使用http://wiki.apache.org/solr/FieldCollapsing 找到解决方案,但如果我使用group.field=name 搜索“x”,Solr 将在搜索后进行分组,为我提供上述两个名称的版本1。我需要它更像一个过滤器查询。

【问题讨论】:

标签: solr fieldcollapsing


【解决方案1】:

不要认为字段折叠会达到目的。

我能想到几个选项 -

  1. 为文档生成一个唯一的相同 ID,这样当您添加新的当前文档时,旧文档会被覆盖,并且您始终只有一个文档版本。
  2. 如果可以为文档维护一个额外的字段,该字段将指示状态为 CURRENT。只有最新的文档才具有字段值,您需要为所有其他版本的文档重置该值。这样,您可以通过过滤查询轻松过滤出最新的文档,还可以使用过滤查询搜索所有版本。

【讨论】:

  • #1 会使我的第一个搜索场景变得不可能。关于#2,添加新文档时是否有一种将旧文档标记为非当前文档的好方法?我想我必须重新索引它。
  • #2 处理需要从数据库(或您的源端)完成,并且肯定需要再次重新索引文档的所有版本。
  • 好的。它可以是 B 计划,同时希望有更好的选择。另一种方法是立即索引到两个核心,一个覆盖(您的选项#1)。文档可能很大,所以我希望它是一次提交。
猜你喜欢
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
相关资源
最近更新 更多