Это зависит от того, насколько сложен ваш набор данных. если у вас есть тонны полей, которые вы хотите нормализовать, вы можете использовать просмотр терминов и разделять Author
и Book
в отдельных индексах и связывать их, используя id
.
Однако,если ваш набор данных не слишком велик, вы можете сделать это так же просто, как показано ниже:
Вы можете выполнить поиск по автору или книге, и он вернет все документы, соответствующие запросу
PUT t1
POST t1/_doc/1
{
"book": "book1",
"author": "author1"
}
POST t1/_doc/2
{
"book": "book2",
"author": "author1"
}
POST t1/_doc/3
{
"book": "book3",
"author": "author2"
}
POST t1/_doc/4
{
"book": "book4",
"author": "author3"
}
QUERY 1 - поиск книг - возвращает книгу 1
POST t1/_search
{
"query": {
"terms": {
"book": [
"book1"
]
}
}
}
#Response
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "t1",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"book" : "book1",
"author" : "author1"
}
}
]
}
}
QUERY 2 - поиск авторов - возвращает book1 и book2
POST t1/_search
{
"query": {
"terms": {
"author": [
"author1"
]
}
}
}
#Author Response
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "t1",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"book" : "book1",
"author" : "author1"
}
},
{
"_index" : "t1",
"_type" : "_doc",
"_id" : "2",
"_score" : 1.0,
"_source" : {
"book" : "book2",
"author" : "author1"
}
}
]
}
}