如何在solr云中为每个集合使用单核?
solr cloud中是否有任何方法将一个集合的数据保留在适当的位置,以便所有索引和搜索查询仅触发到该集合。我在solr join查询中面临一个问题。 假设我有一份文件如何在solr云中为每个集合使用单核?,solr,solrcloud,Solr,Solrcloud,solr cloud中是否有任何方法将一个集合的数据保留在适当的位置,以便所有索引和搜索查询仅触发到该集合。我在solr join查询中面临一个问题。 假设我有一份文件 { "form_object_id":"a5ec120cd61e41a2a8f05b01edbb8a89", "app_id":2400, "id":"formobj_a5ec120cd61e41a2a8f05b01edbb8a89_account_1704", "
{
"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中有什么方法可以做到这一点吗?是的,这在solr cloud中是可能的。 如果两个文档不在同一个碎片中,则无法联接。 要使join工作,您必须将每个链接文档保存在同一个碎片中,在您的情况下,如果这两个数据都保存在同一个碎片中,那么join将如我们所期望的那样工作 解决方案1: 在“id”字段前面加上一些常用值,后跟“”!”(感叹号)。从上面的例子来看,“account_1704”似乎是上述文档之间的共同点 如果可能,创建类似“account_1704!_formobj_a5ec120cd61e41a2a8f05b01edbb8a89”和“account_1704!_formobj_A478; CE4BCD7C441C8534849631BEBAF8”的id 这样,这2个文档将永远处于同一个碎片中(理由:SoR会考虑字符串)!对于哈希创建和创建的两个文档都是相同的,所以两个文档将在相同的碎片中路由) 如果无法进行“id”操作,则选择解决方案2 解决方案2: 创建集合时,将router.name设置为“隐式”(默认为compositeId)并将router.field设置为“form\u object\u id”(因为这在文档之间很常见)。
然后这些文档将被存储在同一个shard中,join将起作用。是的,这在solr云中是可能的。 如果两个文档不在同一个碎片中,则无法联接。 要使join工作,您必须将每个链接文档保存在同一个碎片中,在您的情况下,如果这两个数据都保存在同一个碎片中,那么join将如我们所期望的那样工作 解决方案1: 在“id”字段前面加上一些常用值,后跟“”!”(感叹号)。从上面的例子来看,“account_1704”似乎是上述文档之间的共同点 如果可能,创建类似“account_1704!_formobj_a5ec120cd61e41a2a8f05b01edbb8a89”和“account_1704!_formobj_A478; CE4BCD7C441C8534849631BEBAF8”的id 这样,这2个文档将永远处于同一个碎片中(理由:SoR会考虑字符串)!对于哈希创建和创建的两个文档都是相同的,所以两个文档将在相同的碎片中路由) 如果无法进行“id”操作,则选择解决方案2 解决方案2: 创建集合时,将router.name设置为“隐式”(默认为compositeId)并将router.field设置为“form\u object\u id”(因为这在文档之间很常见)。
然后,这些文档将存储在同一个碎片中,并且join将起作用。据我所知,这些文档必须存在于同一台服务器上,才能成功进行join。您可以使用以确保相关文档最终位于相同的碎片上。看看这是否有帮助。据我所知,文档必须存在于同一台服务器上才能成功加入。您可以使用以确保相关文档最终位于相同的碎片上。看看这是否有帮助。