Java Elasticsearch创建索引
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创建索引相关推荐
- Elasticsearch Java Client创建索引
1 配置 pom.xml org.springframework.boot spring-boot-starter-test org.elasticsearch.client elasticsearc ...
- 怎样合理创建es索引_如何通过Elasticsearch创建索引库?
今天是刘小爱自学Java的第158天. 感谢你的观看,谢谢你. 学习计划安排如下:Elasticsearch作为一门全文检索技术,那它是如何使用的呢? 先学习Elasticsearch的一些语法,后续 ...
- Elasticsearch创建索引和映射结构详解
前言 这篇文章详细介绍了如何创建索引和某个类型的映射. 下文中[address]指代elasticsearch服务器访问地址(http://localhost:9200). 1 创建索引 ...
- hbase建索引java api_hbase创建索引
1.代码 package Test05; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import ...
- 最新Elastic search7.13.1 Java API创建索引并且设置分词
1.# 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考 ...
- es java api 创建索引结构_elasticsearch - 如何使用ES的Java API来创建一个新类型的索引 - SO中文参考 - www.soinside.com...
我已经成功创建索引的使用客户,这样的代码: public static boolean addIndex(Client client,String index) throws Exception { ...
- elasticsearch创建索引映射
1.我们这里通过google自带的工具postman来创建索引,这里我们创建一个:vclogdb,看到返回"acknowledged": true,表示创建成功: 2.通过elas ...
- java搜索引擎创建索引_搜索引擎系列 ---lucene简介 创建索引和搜索初步
一.什么是Lucene? Lucene最初是由Doug Cutting开发的,2000年3月,发布第一个版本,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎 :Lucene得名于Doug妻子 ...
- ElasticSearch创建索引:[hotel/6g9tufKRuWDdWfgE_F30Q] ElasticsearchStatusException[Elasticsearch exception
报错: [hotel/hxWlZTdjTuKaC8m2uzj_JQ] ElasticsearchStatusException[Elasticsearch exception [type=resour ...
最新文章
- 企业生产过程中的日志和时间管理详解
- Android 的源代码结构
- [异步、tensorflow] - 子线程操作tensor,主线程处理tensor
- python找人_python之找最后一个人
- NCRE四级网络工程师考题详解----对等计算模型(P2P)
- Gitbook/Markdown中插入复杂(合并单元格)的表格
- matlab 命令集结(1)
- 关于如何在视频中合成声音
- 小型的搜索引擎设计_广州网站设计工作室-赛致信息科技
- Win10下Photoshop cc 2019安装
- PROFINET转EtherCAT网关方案设计
- 基于移动通信数据的城市可视分析研究
- java反射为什么消耗资源_Java反射笔记
- validity属性返回对象中的属性值
- 良心推荐:看完这 20 部 BBC 神级纪录片,英语水平提升几个 Level!
- 塞雷三分钟漫画中国史4
- wireshark安装s7comm-plus插件
- 美好(fanzao)的一天又开始了今天研究SpringBoot
- 第一章 算法设计与分析基础知识
- 3D模型免费下载网站大全