Easy-es - easy use for elastich search

Related tags

Database easy-es
Overview

East-Es-Logo

Born To Simplify Development

maven code style

What is Easy-Es?

Easy-Es is a powerfully enhanced toolkit of RestHighLevelClient for simplify development. This toolkit provides some efficient, useful, out-of-the-box features for ElasticSearch. By using Easy-Es, you can use MySQL syntax to complete Es queries. Use it can effectively save your development time.

Links

Features

  • Auto configuration on startup
  • Out-of-the-box interfaces for operate es
  • Powerful and flexible where condition wrapper
  • Lambda-style API
  • Automatic paging operation
  • Support high-level syntax such as highlighting and weighting
  • ...

Compare

Demand: Query all documents with title equals "Hi" and author equals "Guy"

// Use Easy-Es to complete the query with only 3 lines of code
LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
wrapper.eq(Document::getTitle, "Hi").eq(Document::getCreator, "Guy");
List<Document> documents = documentMapper.selectList(wrapper);
// Query with RestHighLevelClient requires 11 lines of code, not including parsing JSON code
String indexName = "document";
SearchRequest searchRequest = new SearchRequest(indexName);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
TermQueryBuilder titleTerm = QueryBuilders.termQuery("title", "Hi");
TermsQueryBuilder creatorTerm = QueryBuilders.termsQuery("creator", "Guy");
boolQueryBuilder.must(titleTerm);
boolQueryBuilder.must(creatorTerm);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(boolQueryBuilder);
searchRequest.source(searchSourceBuilder);
try {
    SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
    // Then parse the DocumentList from searchResponse in various ways, omitting these codes...
    } catch (IOException e) {
            e.printStackTrace();
    }

The above is just a simple query demonstration. The more complex the actual query scene, the better the effect, which can save 3-5 times the amount of code on average.

Getting started

  • Add Easy-Es dependency

    • Latest Version: Maven Central
    • Maven:
      <dependency>
        <groupId>com.github.xpc1024</groupId>
        <artifactId>easy-es-boot-starter</artifactId>
        <version>Latest Version</version>
      </dependency>
    • Gradle
      compile group: 'com.github.xpc1024', name: 'easy-es-boot-starter', version: 'Latest Version'
  • Add mapper file extends BaseEsMapper interface

    public interface DocumentMapper extends BaseMapper<Document> {
    }
  • Use it

    LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
    wrapper.eq(Document::getTitle,"Hello World")
           .eq(Document::getCreator,"Guy");
    List<Document> documentList = documentMapper.selectList();
    

    Easy-Es will execute the following Query:

    {"query":{"bool":{"must":[{"term":{"title":{"value":"Hello World","boost":1.0}}},{"term":{"creator":{"value":"Guy","boost":1.0}}}],"adjust_pure_negative":true,"boost":1.0}}}

    The syntax of this query in MySQL is:

     SELECT * FROM document WHERE title = 'Hello World' AND creator = 'Guy'

This showcase is just a small part of Easy-Es features. If you want to learn more, please refer to the documentation.

Syntax comparison with MySQL

MySQL Easy-Es
and and
or or
= eq
!= ne
> gt
>= ge
< lt
<= le
like '%field%' like
not like '%field%' notLike
like '%field' likeLeft
like 'field%' likeRight
between between
notBetween notBetween
is null isNull
is notNull isNotNull
in in
not in notIn
group by groupBy
order by orderBy
min min
max max
avg avg
sum sum
sum sum
- orderByAsc
- orderByDesc
- match
- highLight
... ...

Donate

Donate Easy-Es

License

Easy-Es is under the Apache 2.0 license. See the Apache License 2.0 file for details.

Comments
  • eq 查询不到对应的数据

    eq 查询不到对应的数据

     LambdaEsQueryWrapper<Demo> wrapper = new LambdaEsQueryWrapper<>();
     wrapper.like(Demo::getMessage, demoDto.getMessage())
                   .eq(Demo::getUserName, demoDto.getUserName())
                  ...
    demoMapper.selectList(wrapper);
    

    比如这个 demoDto.getUserName() 的值为张三,es中是存在userName为张三的数据的,但是无法查询出来

    opened by MrLucy 2
  • 根据嵌套对象里的字段排序

    根据嵌套对象里的字段排序

    除了利用原生的语句,可以用wrapper的方式根据嵌套对象里的字段排序吗,没有找到对应的方法

    OrderByParam order = new OrderByParam(); order.setOrder("student.age"); wrapper.orderByDesc("student.age"); 用这种方式没有效果,不能排序

    opened by hhf296095496 1
  • 在索引实体类中加入另外一个实体类会报错

    在索引实体类中加入另外一个实体类会报错

    两个实体:

    @Data @IndexName(value = "content_index",shardsNum = 1,replicasNum = 2) public class Content {

    @IndexId(type = IdType.CUSTOMIZE)
    private String indexId;
    
    /**
     * 这个字段没有存进去,在研究
     */
    @IndexField("id")
    private Long id;
    
    @IndexField(value = "title")
    private String title;
    
    /**
     * 将时间格式化,并转为中国时区
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date planEndTime;
    
    private Integer tplId;
    
    
    @IndexField(value = "student",fieldType = FieldType.OBJECT)
    private Student student;
    

    // @IndexField(value = "students",fieldType = FieldType.ARRAY) // private List students;

    public void setId(Long id) {
        this.id = id;
        this.indexId = id.toString();
    }
    

    }

    @Data @AllArgsConstructor @NoArgsConstructor public class Student {

    private String name;
    
    private Integer age;
    
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date dirthday;
    

    }

    报错内容: 12:56:51.371 [http-nio-8080-exec-1] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.reflect.UndeclaredThrowableException] with root cause java.lang.NullPointerException: null at com.alibaba.fastjson.serializer.SerializeWriter.writeFieldValueStringWithDoubleQuoteCheck(SerializeWriter.java:1869) at com.alibaba.fastjson.serializer.SerializeWriter.writeFieldValue(SerializeWriter.java:1854) at com.alibaba.fastjson.serializer.ASMSerializer_2_Student.writeNormal(Unknown Source) at com.alibaba.fastjson.serializer.ASMSerializer_2_Student.write(Unknown Source) at com.alibaba.fastjson.serializer.ASMSerializer_1_Content.writeNormal(Unknown Source) at com.alibaba.fastjson.serializer.ASMSerializer_1_Content.write(Unknown Source) at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:312) at com.alibaba.fastjson.JSON.toJSONString(JSON.java:769) at com.alibaba.fastjson.JSON.toJSONString(JSON.java:707) at cn.easyes.core.conditions.BaseEsMapperImpl.buildJsonIndexSource(BaseEsMapperImpl.java:1132) at cn.easyes.core.conditions.BaseEsMapperImpl.buildIndexRequest(BaseEsMapperImpl.java:855) at cn.easyes.core.conditions.BaseEsMapperImpl.doInsert(BaseEsMapperImpl.java:546) at cn.easyes.core.conditions.BaseEsMapperImpl.lambda$insert$7(BaseEsMapperImpl.java:266) at java.base/java.util.stream.ReferencePipeline$4$1.accept(ReferencePipeline.java:212) at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.IntPipeline.reduce(IntPipeline.java:491) at java.base/java.util.stream.IntPipeline.sum(IntPipeline.java:449) at cn.easyes.core.conditions.BaseEsMapperImpl.insert(BaseEsMapperImpl.java:267) at cn.easyes.core.conditions.BaseEsMapperImpl.insert(BaseEsMapperImpl.java:257) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at cn.easyes.core.proxy.EsMapperProxy.invoke(EsMapperProxy.java:28) at com.sun.proxy.$Proxy57.insert(Unknown Source) at com.hhf.controller.TestController.t1(TestController.java:56) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834)

    opened by hhf296095496 1
  • id是索引中的一个字段怎么办,又想把id设置为主键

    id是索引中的一个字段怎么办,又想把id设置为主键

    @Data @IndexName(value = "rmrb_live_info_test_s1") public class Content {

    @IndexField("id")
    @IndexId(type = IdType.CUSTOMIZE)
    private Long id;
    
    private String title;
    
    private Date planEndTime;
    
    private Integer tplId;
    

    }

    我实体类是这样写的,id即使主键又是索引数据的一个字段,我这样写,只能把id设置成主键,索引数据中没有id这个字段,请问怎么设置呢

    opened by hhf296095496 1
  • ES官方最新版已经做了对sql的兼容

    ES官方最新版已经做了对sql的兼容

    读最新的文档,发现官方也已经支持类似的功能了 https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-getting-started.html POST /_sql?format=txt { "query": "SELECT * FROM library WHERE release_date < '2000-01-01'" }

    opened by kequeen 1
  • 注解标记高亮,导致空指针异常

    注解标记高亮,导致空指针异常

    在insert保存的时候,由于当前需要存储的字段被标记为高亮,在insert时,被标记为高亮字段所在列被忽略,导致序列化过程中出现空指异常。为什么需要插入的时候需要把高亮字段忽略,没太明白作者的意图,我理解不应该忽略该内容,如果需要忽略也是按照具体序列化方式,或者把序列化方式的操作抽象为接口,可以让使用者自己选择

    opened by jojocodeX 1
  • Add ability to configure TLS certificate and set ApiCompatibilityMode to support ElasticSearch 8

    Add ability to configure TLS certificate and set ApiCompatibilityMode to support ElasticSearch 8

    • In ElasticSearch 8.x, TLS and user authentication are enabled by default, can the developer suggest how to set http_ca.crt at https://github.com/xpc1024/easy-es-springboot-demo ?

    • Here are two blog posts about how to connect via TLS certificate under co.elastic.clients:elasticsearch-java:8.1.1, but it would be better if some friends can give the introduction of global configuration of TLS certificate in easy-es (Maybe in application.yml). Refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/8.1/_encrypted_communication.html and https://spinscale.de/posts/2022-02-17-running-elasticsearch-8-with-testcontainers.html .

    • I noticed that the component is using RestHighLevelClient, which means that if somebody need to connect to the ElasticSearch 8.x cluster, he need to add the environment variable ELASTIC_CLIENT_APIVERSIONING: true for ElasticSearch. For this part, please refer to https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-api-compatibility.html . Hope that helps with the corresponding tests.

    • As a supplement, developers should try adding a property set to HLRC's client.setApiCompatibilityMode(true) in the easy-es configuration class. See https://github.com/elastic/elasticsearch/issues/77859, which helps in finding issues with unit tests in Elastic Stack 8.x versions without setting client-side environment variables.

    • Also, there is a clarification as https://discuss.elastic.co/t/migration-from-hlrc-to-java-api/300479 , HLRC version 7.17.1 and Java API client 8.x, both use the same RestClient for http communication, and they can coexist in the same project, I think it can be gradually migrated to the new client on easy-es. Of course, the Java API client 8.x is basically generated by the API specification, This leads to the fact that although its API is stable, its documentation is still not finished, and somebody need to go to JavaDoc to see more information.

    opened by linghengqian 1
  • Any plan to support FieldType.WILDCARD

    Any plan to support FieldType.WILDCARD

    Description

    Auto index only cover TEXT or KEYWORD, do we have the possible to support wildcard? For current version, I have to set manual index-mode and manually create index for wildcard.

    Expect Sample

    @IndexField(fieldType = FieldType.WILDCARD)
    private String content;
    

    Then it will auto create index as type wildcard

    Reference

    https://www.elastic.co/guide/en/elasticsearch/reference/7.17/keyword.html#wildcard-field-type

    opened by alaahong 0
  • 请求支持索引数据从DB中同步

    请求支持索引数据从DB中同步

    请求支持场景: 业务数据使用MySQL存储,ES只做搜索,这样就需要支持MySQL数据同步到ES; MySQL设计表结构一般遵循三范式、ES索引结构却支持多层级JSON,故一般SQL主表一条记录对应ES一个文档、SQL主表的关联表对应ES文档下的一个JSON,如:

    create table student
    (
        id   bigint unsigned auto_increment
            primary key,
        name varchar(32) not null comment '名称'
    );
    create table course
    (
        id   bigint unsigned auto_increment
            primary key,
        name varchar(32) not null comment '名称'
    );
    create table student_course
    (
        id         bigint unsigned auto_increment
            primary key,
        student_id bigint not null comment '学生id',
        course_id  bigint not null comment '课程id'
    );
    

    对应ES的数据应该是:

    {
      "_id": 1,
      "name": "学生名称",
      "course": [
        {
          "course_id": 1,
          "name": "课程名称"
        }
      ]
    }
    

    请求支持此种数据同步,业界方案一般是使用读binlog、表和文档字段映射关系配置来实现,但自己实现起来会遇到各种问题,如:拓展性不够、容灾性不高、数据会丢失、同步会卡住、同步延迟大、SQL改动后会涉及到重建索引 一直没有一个好用的、开源的、易入手的框架工具来解决这个事情,看了作者大大的EE索引维护方案,希望作者大大能够考虑这种场景,出一个解决方案

    opened by ljynfo 0
  • Elasticsearch 版本检查警告日志级别改为 Warning

    Elasticsearch 版本检查警告日志级别改为 Warning

    ERROR 49888 --- [ main] easy-es : Easy-Es supported elasticsearch and restHighLevelClient jar version is:7.14.0 ,Please resolve the dependency conflict!

    如题,ERROR 改为 WARNING,分析日志总是看到,很烦。

    opened by Suomm 0
  • Lambda 缓存

    Lambda 缓存

    LambdaWrapper 构建条件的时候,Lambda 表达式对应的字段名称缓存。

    @Test
    public void testSelect() {
        // 测试查询
        String title = "老汉";
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.eq(Document::getTitle,title);
        Document document = documentMapper.selectOne(wrapper);
        System.out.println(document);
        Assert.assertEquals(title,document.getTitle());
    }
    

    e.g. Document::getTitle -> title 第二次使用的时候,直接使用第一次生成好的缓存。

    opened by Suomm 0
Releases(v1.1.1)
  • v1.1.1(Dec 8, 2021)

    v1.1.1

    1.修复在混合查询模式下,用户手count api无效的缺陷。#I66ITR 2.修复分页参数中hasNextPage不正确的缺陷。#I64NJF 3.修复仅设置socketTimeOut不设置requestTimeOut等参数时socketTimeOut参数无效的缺陷。#I66IUI 4.调整trackTotalSize大于1W条时自动开启的逻辑为用户配置,(配置为开启则开启,配置为关闭则关闭,部分用户反馈自动开启会产生幻觉) 本期主要是一些小缺陷修复和体验优化,后面两个版本将有重大更新

    --

    v1.1.1

    1. Fix the defect that the user's manual count api is invalid in the mixed query mode.#I66ITR
    2. Fix the bug that hasNextPage is incorrect in paging parameters.#I64NJF
    3. Fix the defect that the socketTimeOut parameter is invalid when only the socketTimeOut parameter is set and the requestTimeOut parameter is not set.#I66IUI
    4. When the trackTotalSize is adjusted to be greater than 1W, the logic of automatic opening is configured by the user. (If it is configured to be open, it will be open. If it is configured to be closed, it will be closed. Some users report that the automatic opening will cause illusion.) This issue mainly focuses on minor defect repair and experience optimization, and the next two versions will have major updates
    Source code(tar.gz)
    Source code(zip)
Owner
null
MapDB provides concurrent Maps, Sets and Queues backed by disk storage or off-heap-memory. It is a fast and easy to use embedded Java database engine.

MapDB: database engine MapDB combines embedded database engine and Java collections. It is free under Apache 2 license. MapDB is flexible and can be u

Jan Kotek 4.6k Jan 1, 2023
BenDB - An fastest, qualified & easy to use multi database library

BenDB - An fastest, qualified & easy to use multi database library

Fitchle 2 May 3, 2022
Search the Maven Central Repository from your command line!

Maven Central Search Use Maven Central Repository Search from your command line! Use mcs to quickly lookup dependency coordinates in Maven Central, wi

Maarten Mulders 102 Dec 21, 2022
A Gradle plugin that improves the experience when developing Android apps, especially system tools, that use hidden APIs.

HiddenApiRefinePlugin A Gradle plugin that improves the experience when developing Android apps, especially system tools, that use hidden APIs. Backgr

Rikka apps 125 Jan 5, 2023
A tool based on mysql-connector to simplify the use of databases, tables & columns

Description A tool based on mysql-connector to simplify the use of databases, tables & columns. This tool automatically creates the databases & tables

nz 6 Nov 17, 2022
A simple-to-use storage ORM supporting several databases for Java.

Storage Handler This is a library based off of my old storage handler within my queue revamp. It's for easy storage handling for multiple platforms. N

NV6 7 Jun 22, 2022
Flyway by Redgate • Database Migrations Made Easy.

Flyway by Redgate Database Migrations Made Easy. Evolve your database schema easily and reliably across all your instances. Simple, focused and powerf

Flyway by Boxfuse 6.9k Jan 9, 2023
sql2o is a small library, which makes it easy to convert the result of your sql-statements into objects. No resultset hacking required. Kind of like an orm, but without the sql-generation capabilities. Supports named parameters.

sql2o Sql2o is a small java library, with the purpose of making database interaction easy. When fetching data from the database, the ResultSet will au

Lars Aaberg 1.1k Dec 28, 2022
Flyway by Redgate • Database Migrations Made Easy.

Flyway by Redgate Database Migrations Made Easy. Evolve your database schema easily and reliably across all your instances. Simple, focused and powerf

Flyway by Boxfuse 6.9k Jan 5, 2023
Path Finding Visualizer for Breadth first search, Depth first search, Best first search and A* search made with java swing

Path-Finding-Visualizer Purpose This is a tool to visualize search algorithms Algorithms featured Breadth First Search Deapth First Search Gready Best

Leonard 11 Oct 20, 2022
Search API with spelling correction using ngram-index algorithm: implementation using Java Spring-boot and MySQL ngram full text search index

Search API to handle Spelling-Corrections Based on N-gram index algorithm: using MySQL Ngram Full-Text Parser Sample Screen-Recording Screen.Recording

Hardik Singh Behl 5 Dec 4, 2021
A distributed lock that supports the use of Redis and Zookeeper, out of the box, fast and easy to use

lock-spring-boot-starter A distributed lock that supports the use of Redis and Zookeeper, out of the box, fast and easy to use 一款基于 Redis 和 Zookeeper

Pear Stack 9 Oct 15, 2022
JCLR (JavaColor) is a library that allows you to write colored text in your terminal. It use the ANSI color system. Go check the README.md file to see how to use it.

JCLR JCLR (JavaColor) is a library that allows you to write colored text in your terminal. It use the ANSI color system. To start using it, go to the

Scythe 3 Aug 21, 2021
MapDB provides concurrent Maps, Sets and Queues backed by disk storage or off-heap-memory. It is a fast and easy to use embedded Java database engine.

MapDB: database engine MapDB combines embedded database engine and Java collections. It is free under Apache 2 license. MapDB is flexible and can be u

Jan Kotek 4.6k Dec 30, 2022
:fire: Seata is an easy-to-use, high-performance, open source distributed transaction solution.

Seata: Simple Extensible Autonomous Transaction Architecture What is Seata? A distributed transaction solution with high performance and ease of use f

Seata 23.2k Jan 2, 2023
An advanced, but easy to use, platform for writing functional applications in Java 8.

Getting Cyclops X (10) The latest version is cyclops:10.4.0 Stackoverflow tag cyclops-react Documentation (work in progress for Cyclops X) Integration

AOL 1.3k Dec 29, 2022
An extremely easy way to perform background processing in Java. Backed by persistent storage. Open and free for commercial use.

The ultimate library to perform background processing on the JVM. Dead simple API. Extensible. Reliable. Distributed and backed by persistent storage.

JobRunr 1.3k Jan 6, 2023
A Java library that implements a ByteChannel interface over SSLEngine, enabling easy-to-use (socket-like) TLS for Java applications.

TLS Channel TLS Channel is a library that implements a ByteChannel interface over a TLS (Transport Layer Security) connection. It delegates all crypto

Mariano Barrios 149 Dec 31, 2022
A small and easy-to-use one-time password generator library for Java according to RFC 4226 (HOTP) and RFC 6238 (TOTP).

OTP-Java A small and easy-to-use one-time password generator for Java according to RFC 4226 (HOTP) and RFC 6238 (TOTP). Table of Contents Features Ins

Bastiaan Jansen 106 Dec 30, 2022
Easy to use cryptographic framework for data protection: secure messaging with forward secrecy and secure data storage. Has unified APIs across 14 platforms.

Themis provides strong, usable cryptography for busy people General purpose cryptographic library for storage and messaging for iOS (Swift, Obj-C), An

Cossack Labs 1.6k Dec 29, 2022