【问题标题】:SOLR search by external fields通过外部字段进行 SOLR 搜索
【发布时间】:2013-08-26 15:09:29
【问题描述】:

我们需要的和这里讨论的类似,除了不是作为过滤器 但作为实际查询: 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 OR text:some_query (attribute_id:123 OR attribute_id:456) AND text:some_query 等等……

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

如果可能,我们将不胜感激有关如何实施此功能的任何指导。

【问题讨论】:

    标签: solr lucene


    【解决方案1】:

    我会重复引用问题所提供的建议,并附有条件。

    对于 Solr

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      相关资源
      最近更新 更多