SpringBoot与ElasticSearch整合(91-94)

91、92-ES安装、入门

详见ES篇。

93-检索-SpringBoot整合Jest操作ES

SpringBoot默认是用Spring-Data-ElasticSearch模块进行操作

1.使用Jest来操作ES
导入依赖

		<dependency>
			<groupId>io.searchbox</groupId>
			<artifactId>jest</artifactId>
			<version>5.3.3</version>
		</dependency>

底层使用JestClient和ES的9200端口进行HTTP交互。

配置地址和端口

spring.elasticsearch.jest.uris=http://118.24.44.169:9200

测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot03ElasticApplicationTests {
	@Autowired
	JestClient jestClient;
	
	@Autowired
	BookRepository bookRepository;

	//测试索引
	@Test
	public void contextLoads() {
		//1、给Es中索引(保存)一个文档;
		Article article = new Article();
		article.setId(1);
		article.setTitle("好消息");
		article.setAuthor("zhangsan");
		article.setContent("Hello World");

		//构建一个索引功能
		Index index = new Index.Builder(article).index("atguigu").type("news").build();

		try {
			//执行
			jestClient.execute(index);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	//测试搜索
	@Test
	public void search(){

		//查询表达式
		String json ="{\n" +
				"    \"query\" : {\n" +
				"        \"match\" : {\n" +
				"            \"content\" : \"hello\"\n" +
				"        }\n" +
				"    }\n" +
				"}";

		//构建搜索功能
		Search search = new Search.Builder(json).addIndex("atguigu").addType("news").build();

		//执行
		try {
			SearchResult result = jestClient.execute(search);
			System.out.println(result.getJsonString());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

总结:Jest里操作都是用Jest里的对象来构建build一个事件,然后用jestClient来执行这个事件。

94-检索-SpringBoot整合SpringDataElasticsearch操作ElasticSearch

导入依赖

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>

注意:可能会引发版本不匹配的问题,解决方法为参照下面文档中的匹配规则,修改ES版本或者SpringDataElasticSearch版本。
版本适配说明https://github.com/spring-projects/spring-data-elasticsearch

配置节点信息

spring.data.elasticsearch.cluster-name=elasticsearch     //节点名
spring.data.elasticsearch.cluster-nodes=118.24.44.169:9301		//节点IP和集群端口

自定义ElasticsearchRepository子接口,继承时泛型传自定义对象和主键类型

public interface BookRepository extends ElasticsearchRepository<Book,Integer> {
   public List<Book> findByBookNameLike(String bookName);
}

测试索引

	@Test
	public void test02(){
		Book book = new Book();
		book.setId(1);
		book.setBookName("西游记");
		book.setAuthor("吴承恩");
		bookRepository.index(book);
	}

测试查询

	@Test
	public void test01(){
		for (Book book : bookRepository.findByBookNameLike("游")) {
			System.out.println(book);
		};
	}

注意:SpringBootDataElasticSearch的子接口会根据方法名来发送对应的查询请求。
也可以用@Query注解标注自定义的查询表达式。
详细参照官方文档:https://docs.spring.io/spring-data/elasticsearch/docs/3.0.6.RELEASE/reference/html/#elasticsearch.query-methods

©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页