首先这里使用的是elasticSearch(以下简称elastic)的2.4.6版本,本来打算是在kibana上面测试的,但是版本太低,kibana好像是不支持,所以换成了head。
一、用到的插件工具
elasticSearch2.4.6以及两个插件(ik中文分池和head界面显示)还有postman
二、启动elastic,bin下面的elasticSearch.bat.
三、插件的使用,启动elastic之后,在elastic的文件底下会多一个plugins,将ik和head解压到这个文件夹底下(必须将压缩包删除),重新启动elastic就可以生效了。
四、测试
在浏览器中访问127.0.0.1:9200/user/_analyze?analyzer=ik&text=….&pretty=true——–>查看中文分词之后的结果
【注】 user:自己注册的词库
…….指的是要分词的中文 例如(中华人民共和国)
五、浏览器中访问http://127.0.0.1:9200/_plugin/head/
六、使用postMan测试
【注】postman在浏览器中,找到扩展程序,添加进去即可
1)使用put方法 http://127.0.0.1:9200/user———>创建索引user
2)使用post方法 http://127.0.0.1:9200/user/userinfo/_mapping
并在body中添加需要中文分词的字段
{
“userinfo”: {
“_all”: {
“analyzer”: “ik_max_word”,
“search_analyzer”: “ik_max_word”,
“term_vector”: “no”,
“store”: “false”
},
“properties”: {
“username”: {
“type” : “string”,
“store”: “no”,
“boost” : 8,
“search_analyzer”: “ik_max_word”,
“term_vector” : “with_positions_offsets”,
“analyzer” : “ik_max_word”,
“include_in_all” : “true”
} ,
“realName”: {
“type” : “string”,
“store”: “no”,
“boost” : 8,
“search_analyzer”: “ik_max_word”,
“term_vector” : “with_positions_offsets”,
“analyzer” : “ik_max_word”,
“include_in_all” : “true”
}
}
}
}
七、代码测试
【工具】IDEA
项目结构
1)新建工程如下
file-new-project-spring Initializr-项目名称和组ID-(NoSql,勾上elasticSearch-finish
2)如果不是按照以上步骤新建的工程,则需要自己配置pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zhiyou</groupId>
<artifactId>elastic-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>elastic-demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
user.java
package com.zhiyou.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@Document(indexName="user",type="userinfo")
public class User {
@Id
private Long id;
private String username;
private String realName;
private int age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", realName='" + realName + '\'' +
", age=" + age +
'}';
}
}
UserSearchRepository接口
package com.zhiyou.dao;
import com.zhiyou.model.User;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
public interface UserSearchRepository extends ElasticsearchRepository<User, Long> {
}
ElasticDemoApplication.java
package com.zhiyou;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ElasticDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ElasticDemoApplication.class, args);
}
}
ElasticTest测试类
package com.zhiyou.dao;
import com.zhiyou.model.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Iterator;
import java.util.List;
import static org.elasticsearch.index.query.QueryBuilders.queryStringQuery;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticTest {
@Autowired
private UserSearchRepository userSearchRepository;
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
/**
* 创建索引
*/
@Test
public void test01() {
elasticsearchTemplate.createIndex(User.class);
}
@Test
public void test02() {
elasticsearchTemplate.deleteIndex(User.class);
}
/**
* 创建文档
*/
@Test
public void add() {
User user = new User();
user.setId(32l);
user.setAge(20);
user.setUsername("中国");
user.setRealName("中华人民共和国");
userSearchRepository.save(user);
}
/**
* 查询所有的文档
*/
@Test
public void test() {
Iterable<User> iterable = userSearchRepository.findAll();
Iterator<User> iterator = iterable.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
/**
* 全文检索
*/
@Test
public void search() {
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(queryStringQuery("和"))
//.withPageable(new PageRequest(1, 20))
.build();
Page<User> page = userSearchRepository.search(searchQuery);
List<User> list = page.getContent();
for (User user : list) {
System.out.println(user);
}
}
}