在 elasticsearch 中使用两个独立的关系索引是否有意义?
Using two separate relational indexes in elasticsearch is sense or not?
我有两个关系 mysql 表,我需要将这些数据存储到 elasticsearch。
我是这样存储的,我想问问你有没有最好的方法:
POST categories/_doc
{
"id" : 1,
"name" : "Phones"
}
POST categories/_doc
{
"id" : 2,
"name" : "TV"
}
PUT products
{
"mappings": {
"properties": {
"attributes": {
"type": "nested"
}
}
}
}
POST products/_doc
{
"id" : 3
"category_id" : 1
"name" : "IPhone 5S",
"attributes" : [
{
"color" : "red",
"stock" : 4
},
{
"color" : "blue",
"stock" : 2
}
]
}
POST products/_doc
{
"id" : 5
"category_id" : 2
"name" : "Samsung TV",
"attributes" : [
{
"color" : "red",
"stock" : 2
},
{
"color" : "yellow",
"stock" : 4
}
]
}
我使用两个查询进行搜索:
我首先搜索类别索引,然后将类别 ID 值发送到产品索引
GET products/_search
{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "attributes",
"query": {
"terms": {
"attributes.color": [
"red",
"blue"
]
}
},
"inner_hits": {}
}
},
{
"term": {
"category_id": 2
}
}
]
}
}
}
你能分享一下你对这个话题的看法吗?
提前致谢
这样做不是一个好的做法,因为您将很难在应用程序上进行排序和分页。在 Elasticsearch 中,出于性能原因将数据扁平化并将其存储在一个索引中非常重要,如果您确实将内容分开,则可以将它们放在多个索引中。还要记住以下几点:
- Elasticsearch 不是关系型数据库。您将无法像以前加入表那样加入索引
- 反规范化并不自然,但却是 Elasticsearch 应用程序效率的关键。
- 尽早考虑数据映射将使您
应用飞行多年。
我有两个关系 mysql 表,我需要将这些数据存储到 elasticsearch。 我是这样存储的,我想问问你有没有最好的方法:
POST categories/_doc
{
"id" : 1,
"name" : "Phones"
}
POST categories/_doc
{
"id" : 2,
"name" : "TV"
}
PUT products
{
"mappings": {
"properties": {
"attributes": {
"type": "nested"
}
}
}
}
POST products/_doc
{
"id" : 3
"category_id" : 1
"name" : "IPhone 5S",
"attributes" : [
{
"color" : "red",
"stock" : 4
},
{
"color" : "blue",
"stock" : 2
}
]
}
POST products/_doc
{
"id" : 5
"category_id" : 2
"name" : "Samsung TV",
"attributes" : [
{
"color" : "red",
"stock" : 2
},
{
"color" : "yellow",
"stock" : 4
}
]
}
我使用两个查询进行搜索:
我首先搜索类别索引,然后将类别 ID 值发送到产品索引
GET products/_search
{
"query": {
"bool": {
"filter": [
{
"nested": {
"path": "attributes",
"query": {
"terms": {
"attributes.color": [
"red",
"blue"
]
}
},
"inner_hits": {}
}
},
{
"term": {
"category_id": 2
}
}
]
}
}
}
你能分享一下你对这个话题的看法吗?
提前致谢
这样做不是一个好的做法,因为您将很难在应用程序上进行排序和分页。在 Elasticsearch 中,出于性能原因将数据扁平化并将其存储在一个索引中非常重要,如果您确实将内容分开,则可以将它们放在多个索引中。还要记住以下几点:
- Elasticsearch 不是关系型数据库。您将无法像以前加入表那样加入索引
- 反规范化并不自然,但却是 Elasticsearch 应用程序效率的关键。
- 尽早考虑数据映射将使您 应用飞行多年。