Ebatis — что это
Ebatis – это декларативный фреймворк Elasticsearch ORM. Достаточно определить интерфейс, чтобы легко получить доступ к Elasticsearch. Ebatis элегантно помогает вам изолировать бизнес-логику от прямого вызова низкоуровневых интерфейсов доступа к Elasticsearch, и вам больше не нужно вручную создавать сложные DSL-операторы. Кроме того, когда вы обновляете версию Elasticsearch, бизнесу не нужно беспокоиться об изменениях в низкоуровневом интерфейсе, и обновление происходит плавно. В настоящее время поддерживаются версии Elasticsearch 6.5.1 и 7.5.1.
Текущее состояние ebatis
Ebatis уже стабильно работает в течение года на множестве бизнес-систем, обеспечивая около 1 миллиарда поисковых услуг в день.
Быстрый старт
Зависимости POM (в настоящее время также поддерживает 6.5.1.2.RELEASE):
<dependency>
<groupId>io.manbang</groupId>
<artifactId>ebatis-core</artifactId>
<version>7.5.1.4.RELEASE</version>
</dependency>
Создание кластера подключения:
@AutoService(ClusterRouterProvider.class)
public class SampleClusterRouterProvider implements ClusterRouterProvider {
public static final String SAMPLE_CLUSTER_NAME = "sampleCluster";
@Override
public ClusterRouter getClusterRouter(String name) {
if (SAMPLE_CLUSTER_NAME.equalsIgnoreCase(name)) {
Cluster cluster = Cluster.simple("127.0.0.1", 9200, Credentials.basic("admin", "123456"));
return ClusterRouter.single(cluster);
} else {
return null;
}
}
}
Определение POJO-объекта:
@Data
public class RecentOrder {
private Long cargoId;
private String driverUserName;
private String loadAddress;
private Boolean searchable;
private Integer companyId;
}
@Data
public class RecentOrderCondition {
private Boolean searchable;
private String driverUserName;
}
Определение интерфейса Mapper:
@Mapper(indices = "recent_order_index")
public interface RecentOrderRepository {
@Search
List<RecentOrder> search(RecentOrderCondition condition);
}
Тестирование интерфейса:
@Slf4j
public class OrderRepositoryTest {
@Test
public void search() {
// 组装查询条件
RecentOrderCondition condition = new RecentOrderCondition();
condition.setSearchable(Boolean.TRUE);
condition.setDriverUserName("张三");
// 映射接口
RecentOrderRepository repository = MapperProxyFactory.getMapperProxy(RecentOrderRepository.class, SampleClusterRouterProvider.SAMPLE_CLUSTER_NAME);
// 搜索货源
List<RecentOrder> orders = repository.search(condition);
// 断言
Assert.assertEquals(3, orders.size());
// 打印输出
orders.forEach(order -> log.info("{}", order));
}
}
Поисковый DSL-оператор:
{
"query" : {
"bool" : {
"must" : [ {
"term" : {
"searchable" : {
"value" : true,
"boost" : 1.0
}
}
}, {
"term" : {
"driverUserName" : {
"value" : "张三",
"boost" : 1.0
}
}
} ],
"adjust_pure_negative" : true,
"boost" : 1.0
}
},
"_source" : {
"includes" : [ "cargoId", "driverUserName", "loadAddress", "searchable", "companyId" ],
"excludes" : [ ]
}
}
Версия ebatis использует обозначение xx.xx.xx.xx.RELEASE, где первые три цифры представляют собой версию драйвера Elasticsearch, а последняя цифра представляет собой итерацию ebatis на этой версии. Например, 7.5.1.3.RELEASE означает третью итерацию ebatis на версии Elasticsearch 7.5.1.
Начало работы с ebatis и связанные статьи
Руководство по использованию: https://github.com/ymm-tech/ebatis/wiki Связанные статьи: https://www.infoq.cn/article/u4Xhw5Q3jfLE1brGhtbR Связанные статьи: https://mp.weixin.qq.com/s/GFRiiQEk-JLpPnCi_WrRqw
Группа общения
DingTalk
Поддержите нас
Открытым проектам нужна постоянная поддержка, и, конечно, наша поддержка также исходит от вашей поддержки. Надеемся, что вы: point_right: пришли сюда, добавьте ещё и подписку point_left:
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )