[Привет!]
Я хочу создать запрос ES, который извлекает только определенные элементы, которые совпадают в списке.
Вот моя схема индекса ES.
"test-es-2018":{
"aliases": {},
"mappings": {
"test-1": {
"properties": {
"categoryName": {
"type": "keyword",
"index": false
},
"genDate": {
"type": "date"
},
"docList": {
"properties": {
"rank": {
"type": "integer",
"index": false
},
"doc-info": {
"properties": {
"docId": {
"type": "keyword"
},
"docName": {
"type": "keyword",
"index": false
},
}
}
}
},
"categoryId": {
"type": "keyword"
},
}
}
}
}
В этой категории перечислены документы.Документы в списке имеют свою собственную информацию.
* поисковый запрос в Кибане.
source": {
"categoryName" : "food" ,
"genDate" : 1577981646638,
"docList" [
{
"rank": 2,
"doc-info": {...}
},
{
"rank": 1,
"doc-info": {...}
},
{
"rank": 5,
"doc-info": {...}
},
],
"categoryId": "201"
}
Сначала я хочу получить только значение элемента, которое соответствует вlist.
Я бы хотел видеть в списке только документы с рангом 1.Однако, если я сделаю запрос, используя match
, как показано ниже, результат будет таким же, как и * поисковый запрос в кибане .
* запрос на совпадение в Кибане.
GET test-es-2018/_search
{
"query": {
"bool": {
"must": [
{ "match": { "docList.rank": 1 } },
]
}
}
}
На мой взгляд, кажется, что распечатывается весь список, потому что он содержит документ с рангом 1.
Что я хочу:
source": {
"categoryName" : "food" ,
"genDate" : 1577981646638,
"docList" [
{
"rank": 1,
"doc-info": {...}
},
],
"categoryId": "201"
}
Возможно ли это?
Во-вторых, я хочу отсортировать список документов по рангу.Я попытался отсортировать, создав запрос, подобный следующему, но он не был отсортирован.
* запрос сортировки в Кибане.
GET test-es-2018/_search?
{
"query" : {
"bool" : {...}
},
"sort" : [
{
"docList.rank" : {
"order" : "asc"
}
}
]
}
Что я хочуis:
source": {
"categoryName" : "food" ,
"genDate" : 1577981646638,
"docList" [
{
"rank": 1,
"doc-info": {...}
},
{
"rank": 2,
"doc-info": {...}
},
{
"rank": 5,
"doc-info": {...}
},
],
"categoryId": "201"
}
Я не знаю, как получить доступ к списку.Есть ли хорошая идея для обеих этих проблем?