如何在Solr Cloud中为每个集合使用单核?

时间:2019-04-02 09:44:02

标签: solr solrcloud

solr云中是否有任何方法可以将一个集合的数据保留在适当的位置,以便所有索引和搜索查询仅触发该集合。我在Solr联接查询中遇到问题。 可以说我有一个文件,

{
        "form_object_id":"a5ec120cd61e41a2a8f05b01edbb8a89",
        "app_id":2400,
        "id":"formobj_a5ec120cd61e41a2a8f05b01edbb8a89_account_1704",
        "account_id":1704,
        "location_gps_value":"[]",
        "title":"Mumbai",
        "formobject_created_at":"2019-03-31T09:28:40Z",
        "formobject_id":"a5ec120cd61e41a2a8f05b01edbb8a89",
        "Region_2_name":["Maharashtra"],
        "Region_2":["a478ce4bcd7c441c8534849631bebaf8"],
}


In this document i have one field "Region_2" which contains one id "a478ce4bcd7c441c8534849631bebaf8" & this id is present in 208 other solr documents like,

{
        "form_id":26825,
        "form_object_id":"a478ce4bcd7c441c8534849631bebaf8",
        "title":"Maharashtra",
        "location.lat":0.0,
        "location.long":0.0,
        "created_date":"2019-03-31T09:27:55Z",
        "form_name":"Region",
        "type":"assetformobject",
        "id":"formobj_a478ce4bcd7c441c8534849631bebaf8_account_1704",
}

此处的form_object_id与先前文档中的“ Region_2”字段相同。 当我加入时,

{!join+from=Region_2+to=form_object_id}title:Mumbai

该查询本应返回208个文档,但仅返回51个文档,但是当我在单核中启动solr时,同一查询将返回所有208个结果。 我认为这可能是因为Solr在多个分片之间分布文档。 在solr cloud中有什么方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

是的,这在solr cloud中是可能的。 如果两个文档不在同一分片中,则无法进行联接。 为使加入工作,您必须将每个链接的文档保存在相同的分片中,如果这两种文件都保存在同一分片中,则加入将按我们期望的那样工作。

解决方案1:

为您的“ id”字段添加一些通用值,然后加上“!”(感叹号)。在上面的示例中,“ doc_1_1”似乎是上述文档之间的共同点。

如果可能,请创建ID,例如“ account_1704!_formobj_a5ec120cd61e41a2a8f05b01edbb8a89”和“ account_1704!_formobj_a478ce4bcd7c441c8534849631bebaf8” 这样,这2个文档将始终位于同一分片中(原因:Solr将在!之前考虑字符串以进行哈希创建,并且两个文档的创建具有相同,因此这两个文档将以相同的分片进行路由)

如果无法执行“ id”操作,则选择解决方案2

解决方案2:

在创建集合时,将 router.name 设置为“隐式” (默认为CompositeId),将 router.field设置为“ form_object_id” (为这在文档之间很常见)。 然后,这些文档将存储在相同的分片中,并可以使用join。