一、引入ElasticSearch的jar
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.1</version>
</dependency>
二、创建文档类型实体Bean
package cn.elasticsearch.domain;
public class Article {
private Integer id;
private String title;
private String content;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "Article [id=" + id + ", title=" + title + ", content="
+ content + "]";
}
}
三、ElasticSearch中建立文档,自动创建索引
// 直接在ElasticSearch中建立文档,自动创建索引
@Test
public void demo1() throws IOException {
// 创建ElasticSearch连接对象
Client client = getElasticSearchClient();
// 创建对象要添加对象的JSON格式字符串
XContentBuilder builder = XContentFactory.jsonBuilder().startObject()
.field("1", 1)
.field("title", "ElasticSearch是一个基于Lucene的搜索服务器")
.field("content", "它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。")
.endObject();
// 建立文档对象
client.prepareIndex("blog1", "article", "1").setSource(builder).get();
// 关闭连接
client.close();
}
四、QueryBuilders.matchAllQuery() 查询所有
// 搜索在ElasticSearch中创建的文档对象,使用QueryBuilders.matchAllQuery()查询所有
@Test
public void demo2() throws UnknownHostException {
// 创建ElasticSearch连接对象
Client client = getElasticSearchClient();
// 手册数据
SearchResponse searchResponse = client
.prepareSearch("blog1")
.setTypes("article")
.setQuery(QueryBuilders.matchAllQuery()).get();
printSearchResponse(searchResponse);
// 关闭连接
client.close();
}
五、QueryBuilders.queryStringQuery() 分词内容查询
// 使用QueryBuilders.queryStringQuery(搜索内容)进行分词内容查询
@Test
public void demo3() throws UnknownHostException {
// 创建ElasticSearch连接对象
Client client = getElasticSearchClient();
// 搜索数据
SearchResponse searchResponse = client
.prepareSearch("blog1")
.setTypes("article")
.setQuery(QueryBuilders.queryStringQuery("全文")).get();
printSearchResponse(searchResponse);
// 关闭连接
client.close();
}
六、QueryBuilders.wildcardQuery() 范围分词模糊查询
// 使用QueryBuilders.wildcardQuery("搜索范围:如title|content","查询内容")进行范围分词模糊查询
// *表示任意字符串 ?表示任意字符
// 查询结果为0条,说明没有词条包含"全文"
@Test
public void demo4() throws UnknownHostException {
// 创建ElasticSearch连接对象
Client client = getElasticSearchClient();
// 搜索数据
SearchResponse searchResponse = client
.prepareSearch("blog1")
.setTypes("article")
.setQuery(QueryBuilders.wildcardQuery("content", "*全文*")).get();
printSearchResponse(searc