1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/noear-esearchx

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

EsearchX

Elasticsearch ORM фреймework (основанный на лямбда-выражениях, создаёт схожий с SQL опыт)

Maven Apache 2 jdk-8 jdk-11 jdk-17
gitee star github star


Основные характеристики

Основан на 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();

Особенно сложный, используем нативный DSL

ONode dsl = new ONode();
// ...
String resultJson = esx.indice(indice).select(dsl.toJson());
ONode result = ONode.load(resultJson);

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Java
Apache-2.0
Отмена

Обновления (9)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/noear-esearchx.git
git@api.gitlife.ru:oschina-mirror/noear-esearchx.git
oschina-mirror
noear-esearchx
noear-esearchx
main