我有表'元素'这与table' element_parameters'有关。 element_parameters表具有键/值结构。键和值是动态的,它们可以由用户或某些软件创建,因此我无法在“元素”中预定义它们。表。
例如,我有元素' flower'和' car':
elements
--------
flower
car
element_parameters
------------------
element | key | value
flower | smell | soft
car | manufacturer | fiat
flower | color | red
car | wheels | 4
如您所见,可能有任何键和任何值。
但我经常需要通过参数找到元素。这就是问题。一个元素可以有10000多个参数。所以,如果我有100个元素,每次我想找到一些元素时,我必须搜索1000000个参数。我不能在一个查询中执行此操作,因为首先我必须找到符合我条件的所有参数,按参数ID对它们进行分组,然后搜索这些ID的元素表。
是否有一些搜索引擎,我可以将元素与其参数合并并索引到一行'?对于这种情况,Elasticsearch会是一个很好的决定吗?也许有其他方法可以解决它?
谢谢。
答案 0 :(得分:0)
我认为你应该像这样修改你的数据库:
elements
-----------
id | name
1 | flower
2 | car
element_parameters
-------------------------------------------------
element_id | parameters
1 | {"color":"red","smell":"soft"}
2 | {"manufacturer": "fiat", "wheels":3}
您可以轻松找到任何元素的参数:
$id = 1;
$element = Element::find($id)->load('ElementParameters')->get();
$paremeters = json_decode($element->ElementParameters);