Я новичок в Elasticsearch и Spring. Я написал Javascript PO C, который преобразует строку JSON в запрос Elasticsearch (и выполняет запрос). Он принимает строку, подобную этой:
{
"period": "years",
"format": "xml",
"criteria": {
"operator": "OR",
"operands": [
{
"operator": "AND",
"operands": [
{
"operator": "exists",
"field": "def"
},
{
"operator": "includes",
"field": "keywords",
"value": [
"abcd"
]
}
]
},
{
"operator": "AND",
"operands": [
{
"operator": "from",
"field": "links",
"value": 1
},
{
"operator": "includes",
"field": "keywords",
"value": [
"abcd",
"efgh"
]
}
]
}
]
}
}
(Примечание. Этот запрос может иметь любой уровень вложенности)
... и преобразует его в следующее:
{
"query": {
"constant_score": {
"filter": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"bool": {
"must": [
{
"exists": {
"field": "def"
}
},
{
"range": {
"effectiveDate": {
"gte": 1543982400,
"lt": 1575518400
}
}
}
]
}
},
{
"bool": {
"must": [
{
"terms": {
"keywords.name": [
"abcd",
"efgh"
]
}
},
{
"range": {
"effectiveDate": {
"gte": 1543982400,
"lt": 1575518400
}
}
}
]
}
}
]
}
},
{
"bool": {
"must": [
{
"bool": {
"must": {
"terms": {
"links": [
11048,
34618,
34658
]
}
}
}
},
{
"bool": {
"must": [
{
"terms": {
"keywords.name": [
"abcd",
"efgh"
]
}
},
{
"range": {
"effectiveDate": {
"gte": 1543982400,
"lt": 1575518400
}
}
}
]
}
}
]
}
}
]
}
}
}
},
"size": 0,
"aggs": {
"by_id": {
"composite": {
"sources": [
{
"agg_on_id": {
"terms": {
"field": "id"
}
}
}
],
"size": 10000,
"after": {
"agg_on_id": -1
}
},
"aggs": {
"latest_snapshot": {
"top_hits": {
"sort": [
{
"effectiveDate": "desc"
}
],
"_source": true,
"size": 1
}
}
}
}
}
}
Сначала создается запрос (аналогичный описанному выше) для первой поездки в Elasticsearch для извлечения некоторой информации («ссылок»), необходимой для построения этого запроса. Каждая поездка в Elasticsearch может возвращать миллионы результатов, поэтому она выполняет поисковый вызов с использованием механизма «search_after». Мне нужно преобразовать этот PO C в приложение Spring.
Вопрос : Какой из них наиболее подходит для этого случая - Spring Data Elasticsearch или Elasticsearch Java High Level REST Client? Похоже, Spring dataasticsearch хорошо справляется с созданием простых запросов без особых усилий, но поможет ли это мне в этом случае? Любые предложения будут высоко оценены. Спасибо!