spring cloud如何集成elasticsearch

一、导入elasticsearch依赖

其他依赖自行导入

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
    </dependencies>

二、在相对应的启动类添加elasticsearch开启注解

@Import({Knife4jConfiguration.class}) //Swagger配置文件
@EnableElasticsearchRepositories
@SpringCloudApplication
public class SearchApplication {
    public static void main(String[] args) {
        SpringApplication.run(SearchApplication.class,args);
    }
}

三、创建对应的实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "person")
public class Person {

    @Id
    private String id;

    @Field(value = "name",type = FieldType.Text)
    private String name;

    @Field(value = "address",type = FieldType.Text)
    private String address;
    ///usr/share/elasticsearch/plugins
}

四、实现elasticsearch相关业务接口

@Repository
//CrudRepository不能进行分页,分页可继承PagingAndSortingRepository
public interface PersonRepositories extends CrudRepository<Person,String> {
}

五、测试

@SpringBootTest
public class EsTest {

    @Autowired
    ElasticsearchRestTemplate restTemplate;

    @Autowired
    PersonRepositories personRepositories;

    /**
     * 创建索引并插入数据数据
     */
    @Test
    public void test5(){
        Person person=new Person();
        person.setId("5");
        person.setName("张三");
        person.setAddress("xxxxx");
        personRepositories.save(new Person());
        log.info("操作成功");
    }

    /**
     * 获取数据
     */
    @Test
    public void test4(){
        /**
         *    Optional<T> findById(ID var1);  根据id查询数据
         *
         *     boolean existsById(ID var1);  判断对应id是否存在
         *
         *     Iterable<T> findAll();  查询所有数据
         */

        Iterable<Person> people = personRepositories.findAll();
        people.forEach(item->{
            System.out.println(item);
        });
        log.info("操作成功");
    }

    /**
     * 修改数据
     */
    @Test
    public void test3(){
        Person person = personRepositories.findById("5").get();
        person.setName("小明");
        personRepositories.save(person); //save id存在就修改,不存在就添加
        log.info("操作成功");
    }

    /**
     * 删除数据
     */
    @Test
    public void test2(){
        /**
         *    void deleteById(ID var1); //根据id删除
         *
         *     void delete(T var1); //删除整个对应实体
         *
         *     void deleteAll(Iterable<? extends T> var1); //批量删除
         *
         *     void deleteAll();  //删除所有
         */
        personRepositories.deleteById("5");
        log.info("操作成功");
    }

    /**
     * 自定义方法
     */
    @Test
    public void test1(){
     /**
     * Spring Data 的另一个强大功能,是根据方法名称自动实现功能。
	 * 比如:你的方法名叫做:findByTitle,那么它就知道你是根据title查询,
	 * 然后自动帮你完成,无需写实现类。
	 * 当然,方法名称要符合一定的约定:
     *
     */  
    }
}

官方命名模板

KeywordSampleElasticsearch Query String
AndfindByNameAndPrice{ “query” : { “bool” : { “must” : [ { “query_string” : { “query” : “?”, “fields” : [ “name” ] } }, { “query_string” : { “query” : “?”, “fields” : [ “price” ] } } ] } }}
OrfindByNameOrPrice{ “query” : { “bool” : { “should” : [ { “query_string” : { “query” : “?”, “fields” : [ “name” ] } }, { “query_string” : { “query” : “?”, “fields” : [ “price” ] } } ] } }}
IsfindByName{ “query” : { “bool” : { “must” : [ { “query_string” : { “query” : “?”, “fields” : [ “name” ] } } ] } }}
NotfindByNameNot{ “query” : { “bool” : { “must_not” : [ { “query_string” : { “query” : “?”, “fields” : [ “name” ] } } ] } }}
BetweenfindByPriceBetween{ “query” : { “bool” : { “must” : [ {“range” : {“price” : {“from” : ?, “to” : ?, “include_lower” : true, “include_upper” : true } } } ] } }}
LessThanfindByPriceLessThan{ “query” : { “bool” : { “must” : [ {“range” : {“price” : {“from” : null, “to” : ?, “include_lower” : true, “include_upper” : false } } } ] } }}
LessThanEqualfindByPriceLessThanEqual{ “query” : { “bool” : { “must” : [ {“range” : {“price” : {“from” : null, “to” : ?, “include_lower” : true, “include_upper” : true } } } ] } }}
GreaterThanfindByPriceGreaterThan{ “query” : { “bool” : { “must” : [ {“range” : {“price” : {“from” : ?, “to” : null, “include_lower” : false, “include_upper” : true } } } ] } }}
GreaterThanEqualfindByPriceGreaterThan{ “query” : { “bool” : { “must” : [ {“range” : {“price” : {“from” : ?, “to” : null, “include_lower” : true, “include_upper” : true } } } ] } }}
BeforefindByPriceBefore{ “query” : { “bool” : { “must” : [ {“range” : {“price” : {“from” : null, “to” : ?, “include_lower” : true, “include_upper” : true } } } ] } }}
AfterfindByPriceAfter{ “query” : { “bool” : { “must” : [ {“range” : {“price” : {“from” : ?, “to” : null, “include_lower” : true, “include_upper” : true } } } ] } }}
LikefindByNameLike{ “query” : { “bool” : { “must” : [ { “query_string” : { “query” : “?*”, “fields” : [ “name” ] }, “analyze_wildcard”: true } ] } }}
StartingWithfindByNameStartingWith{ “query” : { “bool” : { “must” : [ { “query_string” : { “query” : “?*”, “fields” : [ “name” ] }, “analyze_wildcard”: true } ] } }}
EndingWithfindByNameEndingWith{ “query” : { “bool” : { “must” : [ { “query_string” : { “query” : “*?”, “fields” : [ “name” ] }, “analyze_wildcard”: true } ] } }}
Contains/ContainingfindByNameContaining{ “query” : { “bool” : { “must” : [ { “query_string” : { “query” : “?”, “fields” : [ “name” ] }, “analyze_wildcard”: true } ] } }}
In (when annotated as FieldType.Keyword)findByNameIn(Collectionnames){ “query” : { “bool” : { “must” : [ {“bool” : {“must” : [ {“terms” : {“name” : [“?”,“?”]}} ] } } ] } }}
InfindByNameIn(Collectionnames){ “query”: {“bool”: {“must”: [{“query_string”:{“query”: “”?" “?”", “fields”: [“name”]}}]}}}
NotIn (when annotated as FieldType.Keyword)findByNameNotIn(Collectionnames){ “query” : { “bool” : { “must” : [ {“bool” : {“must_not” : [ {“terms” : {“name” : [“?”,“?”]}} ] } } ] } }}
NotInfindByNameNotIn(Collectionnames){“query”: {“bool”: {“must”: [{“query_string”: {“query”: “NOT(”?" “?”)", “fields”: [“name”]}}]}}}
TruefindByAvailableTrue{ “query” : { “bool” : { “must” : [ { “query_string” : { “query” : “true”, “fields” : [ “available” ] } } ] } }}
FalsefindByAvailableFalse{ “query” : { “bool” : { “must” : [ { “query_string” : { “query” : “false”, “fields” : [ “available” ] } } ] } }}
OrderByfindByAvailableTrueOrderByNameDesc{ “query” : { “bool” : { “must” : [ { “query_string” : { “query” : “true”, “fields” : [ “available” ] } } ] } }, “sort”:[{“name”:{“order”:“desc”}}] }
ExistsfindByNameExists{“query”:{“bool”:{“must”:[{“exists”:{“field”:“name”}}]}}}
IsNullfindByNameIsNull{“query”:{“bool”:{“must_not”:[{“exists”:{“field”:“name”}}]}}}
IsNotNullfindByNameIsNotNull{“query”:{“bool”:{“must”:[{“exists”:{“field”:“name”}}]}}}
IsEmptyfindByNameIsEmpty{“query”:{“bool”:{“must”:[{“bool”:{“must”:[{“exists”:{“field”:“name”}}],“must_not”:[{“wildcard”:{“name”:{“wildcard”:“*”}}}]}}]}}}
IsNotEmptyfindByNameIsNotEmpty{“query”:{“bool”:{“must”:[{“wildcard”:{“name”:{“wildcard”:“*”}}}]}}}

官方连接地址:https://docs.spring.io/spring-data/elasticsearch/docs/4.4.6/reference/html/#elasticsearch.repositories

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. boot默认扫描包:Spring Boot默认会扫描启动类所在的包及其子包下的所有类。可以通过在启动类上添加@ComponentScan注解来改变默认扫描的包路径。 2. Aop注解:AOP(面向切面编程)是Spring框架的一个重要特性,用于在不修改原有代码的情况下,实现对系统中某些关键流程进行增强或控制。常见的AOP注解包括@Aspect、@Pointcut、@Before、@After、@Around等。 3. volatile线程问题:volatile是Java中的一个关键字,用于保证变量的可见性和禁止指令重排序。在多线程环境下,使用volatile修饰的变量可以保证多个线程对变量的修改可以及时被其他线程所感知,从而避免了数据不一致的问题。 4. ConcurrentHashMap为什么线程安全:ConcurrentHashMap是Java中的一个线程安全的Map实现,其内部使用了分段锁的机制,不同的线程可以同时对不同的段进行操作,从而实现了高效的并发访问。 5. mybatis-plus多表查询:Mybatis-Plus是Mybatis的扩展工具包,提供了很多方便的功能。在Mybatis-Plus中进行多表查询可以使用Mybatis-Plus提供的Wrapper接口和QueryWrapper类。 6. limit分页:在MySQL中,LIMIT是用来限制查询结果集的行数的关键字。通过设置LIMIT offset, limit可以实现分页的功能,其中offset表示从查询结果集的第几行开始,limit表示返回的行数。 7. Linux创建文件:在Linux中,可以使用touch命令来创建一个空文件。例如,要在当前目录下创建一个名为test.txt的空文件,可以使用命令touch test.txt。 8. ES存储、修改、如果修改失败怎么办:ES(Elasticsearch)是一款基于Lucene的分布式搜索引擎,支持快速搜索、分析和存储大量数据。在ES中,可以使用API来存储和修改数据。如果修改失败,可以根据具体的错误信息进行排查,比如数据类型不匹配、索引不存在等。 9. Cloud基于什么协议,Dubbo呢?:Spring Cloud是一款基于Spring Boot的微服务框架,基于HTTP协议实现了服务注册、服务发现、服务调用等功能。Dubbo是阿里巴巴开源的一款高性能RPC框架,基于TCP协议实现了服务注册、服务发现、服务调用等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值