SOLR搜索外部字段

3
我们需要的与这里讨论的类似,但不是作为过滤器而是作为实际查询: http://lucene.472066.n3.nabble.com/filter-query-from-external-list-of-Solr-unique-IDs-td1709060.html 我们想要实现一个查询解析器/评分器,使我们能够将SOLR搜索与搜索外部字段相结合。这是由于必须更新整个文档,即使只需要更新文档中的一个字段的限制。
例如,我们有一个名为document_attributes的数据库表,其中包含两列document_id和attribute_id。document_id对应于在SOLR中索引的文档的ID。
我们想能够传递像这样的查询: attribute_id:123 OR text:some_query (attribute_id:123 OR attribute_id:456) AND text:some_query 等...
我们是否可以在SOLR中实现一个插件/模块,能够解析上述查询,然后获取与attribute_id相关联的document_ids,并将结果与SOLR搜索的正常处理相结合,返回整个查询的一组结果。
如果可能的话,请提供有关如何实现此功能的任何指导,我们将不胜感激。
1个回答

1

我想强调之前提到的建议,并加上一些限定条件。

对于 Solr < 4.0,需要考虑以下两种方法:

  • 在查询 Solr 之前进行 DocumentID 查找,并使用文档 ID 列表查询 Solr(例如:fq=(docid:1 OR docid:5)

  • 创建自己的派生 SolrQueryParser,执行数据库查询以替换属性 ID(例如:fq=attribute:1 由查询解析器扩展为 fq=(docid:1 OR docid:5)

决策应围绕您将发送到Solr的文档ID数量展开。 对于小型或中等规模(比如数百个)的文档ID,将ID作为过滤器查询发送可能是最好的方法。 如果您可能会发送大量或非常大量的文档ID,则扩展查询解析器以适应您的情况是一个公平的策略。 如果扩展查询解析器,您可以考虑在专用(非默认)请求处理程序上运行它,并构建诸如缓存等方面,以确保您的结果保持高效性。
对于Solr 4.0及以上版本,您还可以考虑使用跨核心关联。 您可以保留现有的Solr核心不变,并创建一个新核心,该核心索引文档:属性关系。 这应该可以缓解您对整个文档更新的担忧,并允许您在Solr内存中执行整个查询。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接