您的位置:首页 > 编程语言 > Java开发

Spring Boot 构建应用——整合 Elasticsearch 搜索引擎

2016-12-13 18:39 417 查看
ElasticSearch 是一个基于 Lucene 的搜索服务器,是一个分布式、可扩展、实时的搜索与数据分析引擎,它能从项目一开始就赋予你的数据以搜索、分析和探索的能力,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

1.Spring Boot整合Elasticsearch

需要添加 Maven 依赖:

<!-- elasticsearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.6.3</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.6.3</version>
</dependency>


在 Java 配置类中注册 bean:

@Bean
public TransportClient getTransportClient() throws UnknownHostException {
//ES默认TCP端口是9300
InetSocketTransportAddress node = new InetSocketTransportAddress(
InetAddress.getByName("192.168.2.20"), 9300
);
Settings settings = Settings.builder()
.put("cluster.name", "es")
.build();
TransportClient client = new PreBuiltTransportClient(settings);
//多个client多次new InetSocketTransportAddress,多次添加就行
client.addTransportAddress(node);
return client;
}


到此集成成功。

2.Elasticsearch基本用法

首先需要注入 TransportClient:

@Autowired
private TransportClient client;


查询:

GetResponse response = client.prepareGet("book", "techbook", "1").get();
System.out.println(response.getSource()); //输出查询结果


创建:

XContentBuilder builder = XContentFactory.jsonBuilder()
.startObject()
.field("title", "java8")
.field("author", "Tom")
.field("word_count", 1000)
.endObject();
IndexResponse response = client.prepareIndex("book", "techbook")
.setSource(builder)
.get();
System.out.println(response.getResult() + ", id=" + response.getId()); //输出创建结果,成功返回 CREATED


删除:

DeleteResponse response = client.prepareDelete("book", "techbook", "1").get();
System.out.println(response.getResult()); //输出删除结果,成功返回 DELETED


修改:

UpdateRequest request    = new UpdateRequest("book", "techbook", "1");
XContentBuilder builder = XContentFactory.jsonBuilder()
.startObject()
.field("title", "java9")
.endObject();
request.doc(builder);
UpdateResponse response = client.update(request).get();
System.out.println(response.getResult()); //输出修改结果,成功返回 UPDATED


复合查询:

BoolQueryBuilder boolQuery = QueryBuilders.boolQuery()
.must(QueryBuilders.matchQuery("author", "Tom"));
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("word_count")
.from("1000")
.to("5000");
boolQuery.filter(rangeQuery);
SearchResponse response = client.prepareSearch("book")
.setTypes("techbook")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(boolQuery)
.setFrom(0)
.setSize(10)
.get();
System.out.println(response); //输出复合查询结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: