相关键/值表索引/搜索

时间:2015-10-12 12:20:42

标签: mysql laravel indexing elasticsearch key-value

我有表'元素'这与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会是一个很好的决定吗?也许有其他方法可以解决它?

谢谢。

1 个答案:

答案 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);