我有两个Solr核心。
Core0从名为items的Oracle表中导入数据。每个项目都有唯一的ID(item_id),可以是视频项目或音频项目(item_type)。其他字段包含可搜索的文本(描述,评论等)
Core1从名为video_item_dates和audio_item_dates的两个表(来自不同的数据库)导入数据,这些表记录特定市场中项目的发生日期。字段是item_id,item_market和日期。单行看起来像(item_001,'Europe','2011/08 / 15,2011 / 08 / 17,2011 / 08/20)。这两个数据库表中的唯一键是item_id和item_market的组合。我已将数据扁平化为Core1的单个索引。
我现在的问题是搜索两个核心以产生单个结果。一个典型的查询就像是“在描述领域中有飓风一词并且在2011年8月期间在北美市场上运行的项目是什么?”。我可以将此查询分成两个不同的查询,并使它们针对不同的核运行,然后合并结果。但鉴于每个查询可能产生数百万行,这种方法效率非常低。
我尝试过Solr分布式搜索。我使用Core0和Core1中的字段创建了第三个核心(称为Core2)。我向第三个核心添加了一个带有shards属性的请求处理程序,如下所示:
<requestHandler name="shard" class="solr.SearchHandler">
<lst name="defaults">
<str name="shards">localhost/solr/core0/,localhost/solr/core1/</str>
</lst>
</requestHandler>
如果我对第三个核心运行查询,它会将查询转发给Core0和Core1,因为它们都没有所有字段,其中一个报告“未定义字段”,响应是错误的请求错误消息。
非常感谢任何帮助。
请注意我无法控制数据库表的结构。
答案 0 :(得分:2)
这似乎不是多核的情况。您应该考虑设计一个支持所需搜索的模式。
答案 1 :(得分:1)
当核心变得很难并且难以作为单个实体处理时,使用分片。核心将被分解为更小的块,您现在可以在多个核心中进行搜索。 通常他们共享相同的配置。
您需要在两个核心中定义字段以使它们保持同步,这样就不会出现字段未定义错误。 与核心无关的字段将为空白,因此不应影响。
分片不需要您创建新核心。您可以使用core0和core1。 更多信息@ http://wiki.apache.org/solr/DistributedSearch
同时检查分布式搜索的限制。
如果分片性能不令您满意,您可以使用两个数据集创建单个核心,或者检查将核心组合成单核心的合并选项。
答案 2 :(得分:0)
您可以使用CoreAdmin将来自不同核心的索引合并到新索引中: