1,新建一个es的项目。
2,导入依赖Elasticsearch

    <dependencies><!--测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--elasticsearch--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency></dependencies>

3,配置文件

spring:data:elasticsearch:cluster-name: elasticsearch #集群名字cluster-nodes: 192.168.84.130:9300 #elasticsearch服务器ip地址jackson:default-property-inclusion: non_null #作用:当返回数据为null:如name:null ,此时不会显示到页面上来。

4,编写pojo

@Document(indexName = "item",//索引名字一定要小写,否则启动会出错:“InvalidIndexNameException[Invalid index name [Item], must be lowercase”type = "docs",shards = 1,//默认5replicas = 0//默认1
)
public class Item {@IdLong id;@Field(type = FieldType.Text,analyzer = "ik_max_word")String title;@Field(type = FieldType.Keyword)String category;@Field(type = FieldType.Keyword)String brand;@Field(type = FieldType.Double)Double price;@Field(type = FieldType.Keyword,index = false)String images;public Item(Long id, String title, String category, String brand, Double price, String images) {this.id = id;this.title = title;this.category = category;this.brand = brand;this.price = price;this.images = images;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getCategory() {return category;}public void setCategory(String category) {this.category = category;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public String getImages() {return images;}public void setImages(String images) {this.images = images;}
}

5,创建索引和映射

@SpringBootTest
@RunWith(SpringRunner.class)
public class ElasticsearchTest {@Autowiredprivate ElasticsearchTemplate  elasticsearchTemplate;@Testpublic void  testCreate(){this.elasticsearchTemplate.createIndex(Item.class);//创建索引this.elasticsearchTemplate.putMapping(Item.class);//创建映射}
}

6,删除索引

    @Testpublic void deleteIndex(){this.elasticsearchTemplate.deleteIndex("item");//删除索引}

7,对索引库中数据CRUD

对索引库中数据CRUD不用写dao处理,会自动根据方法名或者类的信息进行CRUD操作,只要定义一个接口并继承Respository提供的子接口。

实现接口:Respository

import cn.ly.elasticsearch.pojo.Item;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface ItemRespository extends ElasticsearchRepository<Item,Long> {
}

7.1,a-新增数据:save()

    @Testpublic void testInsert(){Item item=new Item(1L,"华为笔记本","电脑","华为",998.9,"http://huawei.ccm.111.png");this.itemRespository.save(item);}

b-批量新增:savell()

    @Testpublic void testInsert1(){Item item1=new Item(4L,"小米1","电脑3","小米",1998.9,"http://huawei.ccm.111.png");Item item2=new Item(4L,"小米2","是手32","小米",1998.9,"http://huawei.ccm.111.png");Item item3=new Item(4L,"小虾米","3到","小米",1998.9,"http://huawei.ccm.111.png");Item item4=new Item(4L,"小快看","电脑3","小米",1998.9,"http://huawei.ccm.111.png");List<Item> list=new ArrayList<>();list.add(item1);list.add(item2);list.add(item3);list.add(item4);this.itemRespository.saveAll(list);}

7.2,update

当save的时候,当id相同,就会update。

    @Testpublic void testInsert(){Item item=new Item(1L,"华为笔记本2","电脑2","华为",998.9,"http://huawei.ccm.111.png");this.itemRespository.save(item);}

7.3,delete

    @Testpublic void testDelete(){this.itemRespository.deleteById(1L);}

8,Search

    @Testpublic void testSearch(){Optional<Item> itemOptional = this.itemRespository.findById(2L);//按id查询Item item = itemOptional.get();System.out.println(item);}
    @Testpublic void testSearch2(){Iterable<Item> allitem = this.itemRespository.findAll();//查询所有allitem.forEach(item -> System.out.println(item));}

8.1,自定义方法

只需要在编写的接口中根据名字模板,编写方法即可使用。

import cn.ly.elasticsearch.pojo.Item;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface ItemRespository extends ElasticsearchRepository<Item,Long> {//自定义查询方法,该方法名字需要遵循一定的规则,看下表public Item findByTitleAndPrice(String title,double price);//findByNameAndPrice();
}
    @Testpublic void testSearch3(){Item item = this.itemRespository.findByTitleAndPrice("华为笔记本2", 2998.9);System.out.println(item);}

方法名称中受支持的关键字:(https://docs.spring.io/spring-data/elasticsearch/docs/3.2.3.RELEASE/reference/html/#reference)

8.2,search查询

QueryBuilders

    @Testpublic void testSearch4(){//通过查询构造器构建查询条件MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", "华为");//执行查询Iterable<Item> items = this.itemRespository.search(matchQueryBuilder);items.forEach(item -> System.out.println(item));}

NativeSearchQueryBuilder

    @Testpublic void testSearch5(){//构造器NativeSearchQueryBuilder nativeSearchQueryBuilder =new NativeSearchQueryBuilder();//构建基本条件nativeSearchQueryBuilder.withQuery( QueryBuilders.matchQuery("title", "华为"));//执行Page<Item> items = this.itemRespository.search(nativeSearchQueryBuilder.build());//执行查询items.forEach(item -> System.out.println(item));}

NativeSearchQueryBuilder

    @Testpublic void testSearch6(){//构造器NativeSearchQueryBuilder nativeSearchQueryBuilder =new NativeSearchQueryBuilder();//构建基本条件,查询匹配条件的数据nativeSearchQueryBuilder.withQuery( QueryBuilders.matchQuery("title", "华为"));//Pageable的实现类PageRequest//添加分页条件,页码从0开始。nativeSearchQueryBuilder.withPageable(PageRequest.of(0,2));//添加排序条件//SortBuilder子类FieldSortBuilderFieldSortBuilder price = SortBuilders.fieldSort("price").order(SortOrder.DESC);nativeSearchQueryBuilder.withSort(price);//执行Page<Item> items = this.itemRespository.search(nativeSearchQueryBuilder.build());//执行查询items.forEach(item -> System.out.println(item));}

9,聚合

    /*** 获取所有标牌名字的平均价格*/@Testpublic void testSearch7(){//构造器NativeSearchQueryBuilder nativeSearchQueryBuilder =new NativeSearchQueryBuilder();//构建基本条件,查询匹配条件的数据//nativeSearchQueryBuilder.withQuery( QueryBuilders.matchQuery("title", "华为"));//条件0,获取标牌名字为华为的条件的平均价格TermsAggregationBuilder aggs = AggregationBuilders.terms("agg_brand").field("brand")//条件1.subAggregation(AggregationBuilders.avg("agg_price").field("price"));//条件2
//       AbstractAggregationBuilder的子类为TermsAggregationBuildernativeSearchQueryBuilder.addAggregation(aggs);// 添加聚合
//        SourceFilter 的子类FetchSourceFilter:添加结果集过滤FetchSourceFilter fetchSourceFilter = new FetchSourceFilter(null, null);//String[] includes,是否包含某些字段 String[] excludes是否排除某些字段nativeSearchQueryBuilder.withSourceFilter(fetchSourceFilter);//添加结果集过滤,不包含任何字段//执行
//        Page的子类AggregatedPage//执行查询AggregatedPage<Item> aggregatedPage =(AggregatedPage<Item>) this.itemRespository.search(nativeSearchQueryBuilder.build());StringTerms st=(StringTerms)aggregatedPage.getAggregation("agg_brand");//可以根据桶名字获取所有的桶
//        获取桶的集合List<StringTerms.Bucket> buckets = st.getBuckets();buckets.forEach(bucket ->{System.out.println(bucket.getDocCount());System.out.println(bucket.getKeyAsString());Map<String, Aggregation> stringAggregationMap = bucket.getAggregations().asMap();//获取子集的map集合InternalAvg price_avg =(InternalAvg)stringAggregationMap.get("agg_price");//   System.out.println(price_avg);//对象System.out.println(price_avg.getValue());});}

Java Elasticsearch创建索引相关推荐

  1. Elasticsearch Java Client创建索引

    1 配置 pom.xml org.springframework.boot spring-boot-starter-test org.elasticsearch.client elasticsearc ...

  2. 怎样合理创建es索引_如何通过Elasticsearch创建索引库?

    今天是刘小爱自学Java的第158天. 感谢你的观看,谢谢你. 学习计划安排如下:Elasticsearch作为一门全文检索技术,那它是如何使用的呢? 先学习Elasticsearch的一些语法,后续 ...

  3. Elasticsearch创建索引和映射结构详解

    前言 这篇文章详细介绍了如何创建索引和某个类型的映射. 下文中[address]指代elasticsearch服务器访问地址(http://localhost:9200). 1       创建索引 ...

  4. hbase建索引java api_hbase创建索引

    1.代码 package Test05; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import ...

  5. 最新Elastic search7.13.1 Java API创建索引并且设置分词

    1.# 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考 ...

  6. es java api 创建索引结构_elasticsearch - 如何使用ES的Java API来创建一个新类型的索引 - SO中文参考 - www.soinside.com...

    我已经成功创建索引的使用客户,这样的代码: public static boolean addIndex(Client client,String index) throws Exception { ...

  7. elasticsearch创建索引映射

    1.我们这里通过google自带的工具postman来创建索引,这里我们创建一个:vclogdb,看到返回"acknowledged": true,表示创建成功: 2.通过elas ...

  8. java搜索引擎创建索引_搜索引擎系列 ---lucene简介 创建索引和搜索初步

    一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎 :Lucene得名于Doug妻子 ...

  9. ElasticSearch创建索引:[hotel/6g9tufKRuWDdWfgE_F30Q] ElasticsearchStatusException[Elasticsearch exception

    报错: [hotel/hxWlZTdjTuKaC8m2uzj_JQ] ElasticsearchStatusException[Elasticsearch exception [type=resour ...

最新文章

  1. 企业生产过程中的日志和时间管理详解
  2. Android 的源代码结构
  3. [异步、tensorflow] - 子线程操作tensor,主线程处理tensor
  4. python找人_python之找最后一个人
  5. NCRE四级网络工程师考题详解----对等计算模型(P2P)
  6. Gitbook/Markdown中插入复杂(合并单元格)的表格
  7. matlab 命令集结(1)
  8. 关于如何在视频中合成声音
  9. 小型的搜索引擎设计_广州网站设计工作室-赛致信息科技
  10. Win10下Photoshop cc 2019安装
  11. PROFINET转EtherCAT网关方案设计
  12. 基于移动通信数据的城市可视分析研究
  13. java反射为什么消耗资源_Java反射笔记
  14. validity属性返回对象中的属性值
  15. 良心推荐:看完这 20 部 BBC 神级纪录片,英语水平提升几个 Level!
  16. 塞雷三分钟漫画中国史4
  17. wireshark安装s7comm-plus插件
  18. 美好(fanzao)的一天又开始了今天研究SpringBoot
  19. 第一章 算法设计与分析基础知识
  20. 3D模型免费下载网站大全

热门文章

  1. 测试cpu多核性能软件,CPU测试软件权重大改,多核性能仅占2% 玩家:你疯了吗
  2. 成年人与商业保险的亲密接触
  3. 机器人群控避障算法ORCA
  4. Python计算山东新高考选考科目卷面原始成绩为等级成绩
  5. 欧姆龙rxd指令讲解_欧姆龙指令表
  6. AAAI'23 | 两篇大厂CTR预估最新工作
  7. 程序员要不要考公务员
  8. 2023软考中级职称电子商务设计师之路一
  9. win10安装cuda9.0,cudann
  10. Android-浅谈手机号一键免密登陆