乐优商城项目---day11-elasticsearch

1.Elasticsearch介绍和安装

用户访问我们的首页,一般都会直接搜索来寻找自己想要购买的商品。

而商品的数量非常多,而且分类繁杂。如何能正确的显示出用户想要的商品,并进行合理的过滤,尽快促成交易,是搜索系统要研究的核心。

面对这样复杂的搜索业务和数据量,使用传统数据库搜索就显得力不从心,一般我们都会使用全文检索技术,比如之前大家学习过的Solr。

不过今天,我们要讲的是另一个全文检索技术:Elasticsearch。

这个照着笔记和视频上的流程基本都可以顺利安装

后面就是安装IK分词器,安装kibana都是比较容易的

启动成功:

案例测试:

 查询总结:

3.3 高级查询

3.3.1 布尔组合(bool)

3.3.2 范围查询(range)

range 查询找出那些落在指定区间内的数字或者时间

扫描二维码关注公众号,回复: 9901020 查看本文章

 

 

3.5 排序

3.4.1 单字段排序

sort 可以让我们按照不同的字段进行排序,并且通过order指定排序的方式

4. 聚合aggregations

聚合可以让我们极其方便的实现对数据的统计、分析。例如:

  • 什么品牌的手机最受欢迎?

  • 这些手机的平均价格、最高价格、最低价格?

  • 这些手机每月的销售情况如何?

实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现实时搜索效果。

创建测试工程:

引入依赖及其相对应得配置文件信息

spring:
  data:
    elasticsearch:
      cluster-name: elasticsearch
      cluster-nodes: 192.168.1.99:9300

 

测试Demo使用Java程序控制Elasticsearch

@SpringBootTest(classes = elasticsearchApplication.class)
@RunWith(SpringRunner.class)
public class ElasticsearchTest {

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;

    @Test
    public void testIndex(){
        this.elasticsearchTemplate.createIndex(Item.class);
        this.elasticsearchTemplate.putMapping(Item.class);

    }

}

 完成测试:

使用模板进行新增和更新操作

完成测试:

查询方法:

    @Test
    public void testquery(){

        Optional<Item> byId = repository.findById(1l);
        System.out.println(byId);
    }

完成测试:

查询全部

 @Test
    public void testquery(){

        Optional<Item> byId = repository.findById(1l);
        Iterable<Item> items = repository.findAll(Sort.by("price").descending());
        for (Item item : items) {
            System.out.println(item);
        }
    }

完成测试:

自定义方法查询:

@Test
    public void testTitle(){
        List<Item> items = this.repository.findByTitle("手机");
        for (Item item : items) {
            System.out.println(item);
        }
    }

高级查询:通过查询构建器来执行查询

    @Test
    public void testQuey(){
        MatchQueryBuilder queryBuilder = QueryBuilders.matchQuery("title", "手机");
        Iterable<Item> search = this.repository.search(queryBuilder);
        search.forEach(System.out::println);
    }

完成测试:

高级查询:

 public void gaojiTestQuey(){
        NativeSearchQueryBuilder queryBuilder=new NativeSearchQueryBuilder();
        queryBuilder.withQuery(QueryBuilders.matchQuery("title","手机"));
        Page<Item> items = this.repository.search(queryBuilder.build());
        items.forEach(System.out::println);
    }

 

分页查询:

    @Test
    public void PageTest(){
        NativeSearchQueryBuilder queryBuilder=new NativeSearchQueryBuilder();
        queryBuilder.withPageable(PageRequest.of(1,2));
        Page<Item> items = this.repository.search(queryBuilder.build());
        items.forEach(System.out::println);
    }

排序查询:

    @Test
    public void SortTest(){
    NativeSearchQueryBuilder nativeSearchQueryBuilder=new NativeSearchQueryBuilder();
    nativeSearchQueryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC));
        Page<Item> items = this.repository.search(nativeSearchQueryBuilder.build());
        System.out.println(items.getContent());
    }

完成测试:

发布了143 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zgz102928/article/details/104472658