SOLR通过外部字段搜索

时间:2013-08-26 15:09:29

标签: solr lucene

我们需要的是类似于此处讨论的内容,除了不作为过滤器 但作为一个实际的查询: 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对应于 索引的文档的ID是SOLR。

我们希望能够传递以下查询:

attribute_id:123或text:some_query (attribute_id:123 OR attribute_id:456)AND text:some_query 等...

我们可以在SOLR中实现一个能够解析上述内容的插件/模块 查询然后获取与attribute_id和。相关联的document_ids 将结果与SOLR搜索的正常处理相结合,返回一个 整个查询的结果集。

如果有可能,我们非常感谢有关如何实施此建议的任何指导。

1 个答案:

答案 0 :(得分:0)

我会重复参考问题提供的建议,并提供资格。

对于Solr< 4.0要考虑的两种方法是:

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

  • 创建自己的派生SolrQueryParser执行数据库查询以替换文档ID以获取属性ID(eq fq=attribute:1由查询器扩展为fq=(docid:1 OR docid:5)

决定应围绕您将发送给Solr的文档ID的数量。对于小型或事件中等(比如说数百个)文档ID,然后将ID作为filterQuery发送可能是最好的方法。如果您可能发送大量或大量的文档,那么为您的案例扩展一个queryparser是一个公平的策略。如果扩展查询解析器,您可能需要考虑在专用(非默认)请求处理程序上运行它,并在诸如缓存等方面构建,以确保您的结果保持高效性。

对于Solr 4.0及更高版本,您可能还会考虑使用cross-core join。您可以使现有的Solr核心保持原样,并创建一个索引文档的新核心:属性关系。这可以减轻您对整个文档更新的担忧,并允许您在内存中的Solr中执行整个查询。