elasticsearch,key-value,Mysql,Laravel,Indexing,elasticsearch,Key Value" /> elasticsearch,key-value,Mysql,Laravel,Indexing,elasticsearch,Key Value" />

Mysql 相关键/值表索引/搜索

Mysql 相关键/值表索引/搜索,mysql,laravel,indexing,elasticsearch,key-value,Mysql,Laravel,Indexing,elasticsearch,Key Value,我有一个与表'element_parameters'相关的表'elements'。元素参数表具有键/值结构。键和值是动态的,它们可以由用户或某些软件创建,所以我不能在“元素”表中预定义它们 例如,我有元素“花”和“车”: elements -------- flower car element_parameters ------------------ element | key | value flower | smell | soft car |

我有一个与表'element_parameters'相关的表'elements'。元素参数表具有键/值结构。键和值是动态的,它们可以由用户或某些软件创建,所以我不能在“元素”表中预定义它们

例如,我有元素“花”和“车”:

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在这种情况下会是一个好的决定吗?也许还有其他方法可以解决这个问题


谢谢。

我认为您应该这样修改数据库:

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

我认为您应该这样修改数据库:

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

不,这不是解决办法。Flower没有制造商和轮子。正如我所说,参数是动态的,所以我不能在表中预定义它们。我修改了代码。如果将参数存储在json中?我认为这是最快的解决方案。将它们存储为JSON会妨碍构建通过参数搜索元素的查询。确切地说,我不能通过参数搜索元素,因为它们将以JSON格式存储。不,这不是一个解决方案。Flower没有制造商和轮子。正如我所说,参数是动态的,所以我不能在表中预定义它们。我修改了代码。如果将参数存储在json中?我认为这是最快的解决方案。将它们存储为JSON将妨碍构建通过参数搜索元素的查询。确切地说,我不能通过参数搜索元素,因为它们将以JSON格式存储。请您发布一个描述您的问题的一组条件的示例。不清楚您是只想通过元素的参数键搜索元素,还是同时通过元素的值搜索元素。应用程序相当复杂。有时我需要找到一些元素,例如'manufacturer='fiat'和color='red'。通常,我需要以键/值格式存储它们以保持参数的动态性,但当我搜索元素时,我需要使用逻辑,就像它们在一行中一样。EAV模式太糟糕了。但是这里有一些提示:你可以发布一个描述你的问题的一组条件的例子吗。不清楚您是只想通过元素的参数键搜索元素,还是同时通过元素的值搜索元素。应用程序相当复杂。有时我需要找到一些元素,例如'manufacturer='fiat'和color='red'。通常,我需要以键/值格式存储它们以保持参数的动态性,但当我搜索元素时,我需要使用逻辑,就像它们在一行中一样。EAV模式太糟糕了。但这里有一些提示: