Я создал следующие модели данных в качестве образца. Мой индекс будет иметь модель данных в следующем формате.
Posts:
- post_id
- title
- description
* comments
- user_id
- firstname
- comment
* - meaning multiple values
Обычно я сохраняю все данные одного сообщения в одном документе .
Пример отображения
PUT post
{
"mappings":{
"mydocs":{
"properties":{
"comments":{
"type":"nested",
"properties":{
"userid":{
"type":"text"
},
"firstname":{
"type":"text"
},
"comment":{
"type":"text"
}
}
},
"post_id":{
"type":"text"
},
"post_description":{
"type":"text"
},
"post_title":{
"type":"text"
},
"owner":{
"type":"text"
}
}
}
}
}
Образец документа
POST post/mydocs/1
{
"post_id": "1",
"owner": "1",
"post_description": "I'm doing some analysis on this and its very confusing. Can anyone help me here?",
"post_title": "neo4j vs elasticsearch",
"comments": [
{
"userid": "2",
"firstname": "John",
"comment": "Both are totally different here"
},
{
"userid": "3",
"firstname": "Jack",
"comment": "Depends on the user case, doesn't it. "
}
]
}
Пример запроса
POST post/_search
{
"_source":[
"post_id",
"comments.userid",
"comments.firstname"
],
"query":{
"bool":{
"must":[
{
"match_all":{} // you can put any condition here
},
{
"nested":{
"path":"comments",
"query":{
"match":{
"comments.userid":"2"
}
}
}
}
]
}
}
}
Ну, это может быть не идеально и может выглядеть нечетко / забавно, однако я надеюсь, что это поможет вам в вашем понимании.
Фактически вы можете проверить модель данных stackoverflow (сущность с именем POST ) и их реализациюasticsearch. Обратитесь к этому LINK , чтобы увидеть, как они смоделировали свои post
в своей базе данных rdbms, и к этому LINK , чтобы увидеть, как они создали индекс для той же самой таблицы.
Я действительно надеюсь, что это поможет:)