Elasticsearch ORM фреймework (основанный на лямбда-выражениях, создаёт схожий с SQL опыт)
Основан на okhttp + snack3, это прозрачный и простой Elasticsearch ORM фреймоворк. Поддерживает версии 7.x и 8.x.
Проект включает три ключевых объекта:
Поддерживает автоматическую сериализацию и десериализацию, а также массовое вставка и обновление; скриптовые запросы, агрегационные запросы.## Быстрый старт:
<dependency>
<groupId>org.noear</groupId>
<artifactId>esearchx</artifactId>
<version>1.0.27</version>
</dependency>
import org.noear.snack.ONode;
//
// Дополнительные примеры можно найти в src/test/
//
public class DemoApp {
String tableCreateDsl = "...";
public void demo() {
// Вывод DSL перед выполнением команды
EsGlobal.onCommandBefore(cmd -> System.out.println("dsl:::" + cmd.getDSL()));
// Создание контекста
EsContext esx = new EsContext("localhost:30480");
// Создание индекса
esx.createIndex("user_log_20200101", createTableDSL);
esx.createIndex("user_log_20200102", createTableDSL);
esx.createIndex("user_log_20200103", createTableDSL);
// Создание псевдонима для индекса
esx.indexAlias(a -> a
.add("user_log_20200101", "user_log")
.add("user_log_20200102", "user_log")
.add("user_log_20200103", "user_log"));
// Удаление индекса (если он существует)
if (esx.existsIndex("user_log_20200101")) {
esx.deleteIndex("user_log_20200101");
}
// Одиночная вставка записи
LogDo logDo = new LogDo();
esx.index("user_log").insert(logDo);
// Одиночная вставка с настройками сериализации
esx.index("user_log").options(options).insert(logDo);
esx.index("user_log").options(options -> {
// Добавление типа кодировки
options.addEncoder(Long.class, (data, node) -> node.value().setString(String.valueOf(data)));
}).insert(logDo);
// Бултинговая вставка записей
List<LogDo> list = new ArrayList<>();
list.add(new LogDo());
esx.index("user_log").insertList(list);
// Бултинговая вставка с временем ожидания (в секундах)
esx.index("user_log").timeout(30).insertList(list);
}
}
``````md
# Один запрос с выделенным результатом
```java
Map result = context.indice(indice)
.where(c -> c.match("content", "tag"))
.highlight(h -> h.addField("content", f -> f.preTags("<em>").postTags("</em>")))
.limit(1)
.selectMap();
EsData<LogDo> result = esx.indice(indice)
.where(c -> c.useScore().must()
.term("tag", "list1")
.range("level", r -> r.gt(3)))
.orderByAsc("level")
.andByAsc("log_id")
.minScore(1)
.limit(50, 50)
.selectList(LogDo.class);
EsData<LogDo> result = esx.indice(indice)
.where(c -> c.script("doc['tag'].value.length() >= params.len", p -> p.set("len", 2)))
.limit(10)
.selectList(LogDo.class);
ONode result = esx.indice(indice)
.where(w -> w.term("tag", "list1"))
.limit(0)
.aggs(a -> a.terms("level", t -> t.size(20))
.aggs(a1 -> a1.topHits(2, s -> s.addByAes("log_fulltime"))))
.selectAggs();
ONode dsl = new ONode();
// ...
String resultJson = esx.indice(indice).select(dsl.toJson());
ONode result = ONode.load(resultJson);
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )