ElasticSearch 基礎知識二

第一、ElasticSearch 基礎操作之增刪改查

1.1 pom.xml 添加相關ElasticSearch jar包依賴。

<!-- elasticseacher 依賴jar 包 -->
		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch</artifactId>
			<version>6.3.2</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>transport</artifactId>
			<version>6.3.2</version>
		</dependency>

1.2 ElasticSearch 通用工具類封裝:

package com.zzg.elasticsearch;

import java.net.InetAddress;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;


/**
 * elasticSearch 工具類
 * 
 * @author Administrator
 *
 */
public class ElasticSearchUtil {

	public Settings getSettings(String clusterName) {
		return Settings.builder().put("cluster.name", clusterName).build();
	}

	public TransportClient getTransportClient(Settings settings, String ip, Integer port) {
		TransportClient client = null;
		try {
			client = new PreBuiltTransportClient(settings)
					.addTransportAddress(new TransportAddress(InetAddress.getByName(ip), port));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return client;
	}

	public void close(TransportClient client) {
		client.close();
	}
	
   // 功能代碼片段
	public void createIndex(TransportClient client, String indexName) {
		client.admin().indices().prepareCreate(indexName).get();
	}

}

1.3 創建Index

測試核心功能代碼:

// TODO Auto-generated method stub
		ElasticSearchUtil util = new ElasticSearchUtil();
		Settings settings = util.getSettings("my-application");
		TransportClient client = util.getTransportClient(settings, "localhost", 9300);
		util.createIndex(client, "blog1");
		util.close(client);

elasticSearch head 管理平臺截圖:

 

 1.4 創建映射Mapping

注意:ElasticSearchUtil  補全創建Mapping 方法。

	public void createMapping(TransportClient client, String indexName, String type, XContentBuilder builder) {
		// 創建映射 
		try {
			PutMappingRequest mapping = Requests.putMappingRequest(indexName) .type(type).source(builder); 
			client.admin().indices().putMapping(mapping).get();
		}catch(Exception e) {
			e.printStackTrace();
		}
		
	}

核心功能代碼:

/**
	 * 創建mapping 映射
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		ElasticSearchUtil util = new ElasticSearchUtil();
		Settings settings = util.getSettings("my-application");
		TransportClient client = util.getTransportClient(settings, "localhost", 9300);
		XContentBuilder builder = getMapping();
		util.createMapping(client, "blog1", "article", builder);
		util.close(client);
	}

	public static XContentBuilder getMapping() {
		XContentBuilder builder = null;
		try {
			builder = XContentFactory.jsonBuilder().startObject().startObject("article").startObject("properties")
					.startObject("id").field("type", "integer").field("store", true).endObject().startObject("title")
					.field("type", "text").field("store", true).field("analyzer", "ik_smart").endObject()
					.startObject("content").field("type", "text").field("store", true).field("analyzer", "ik_smart")
					.endObject().endObject().endObject().endObject();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return builder;
	}

elasticSearch head 管理平臺截圖:

  1.5 創建document

注意:ElasticSearchUtil  補全創建Document方法。

public void createDocument(TransportClient client, String indexName, String type, String id, XContentBuilder source) {
		client.prepareIndex(indexName, type, id).setSource(source).get();
	}

核心功能代碼:

/**
	 * 創建document 文檔對象
	 * @param args
	 */
	public static void main(String[] args) {
		ElasticSearchUtil util = new ElasticSearchUtil();
		Settings settings = util.getSettings("my-application");
		TransportClient client = util.getTransportClient(settings, "localhost", 9300);
		XContentBuilder source = getMapping();
		util.createDocument(client, "blog1", "article", "1", source);
		util.close(client);
	}
	
	public static XContentBuilder  getMapping() {
		XContentBuilder builder = null;
		try {
			 builder = XContentFactory.jsonBuilder() .startObject() .field("id", 1) .field("title", "ElasticSearch是一個基於Lucene的搜索服務器")
					.field("content", "它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用 Java開發的,並作爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到 實時搜索,穩定,可靠,快速,安裝使用方便。") 
					.endObject(); // 建立文檔對象
		}catch(Exception e) {
			e.printStackTrace();
		}
		return builder;
		
	}

elasticSearch head 管理平臺截圖:

   1.6 查詢document

1.6.1 關鍵字查詢

核心功能代碼:

package com.zzg.elasticsearch;

import java.util.Iterator;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;

public class ElasticSearchQuery {
	
	private ElasticSearchUtil util;
	
	public ElasticSearchUtil getUtil() {
		return util;
	}

	public void setUtil(ElasticSearchUtil util) {
		this.util = util;
	}
	
	public ElasticSearchQuery(ElasticSearchUtil util) {
		super();
		this.util = util;
	}

	/**
	 * 關鍵字查詢
	 */
	public void termQuery(String indexName, String type, String field, String value) {
		Settings settings = util.getSettings("my-application");
		TransportClient client = util.getTransportClient(settings, "localhost", 9300);
		
		//2、設置搜索條件 
		SearchResponse searchResponse = client.prepareSearch(indexName) .setTypes(type) .setQuery(QueryBuilders.termQuery(field, value)).get(); 
		//3、遍歷搜索結果數據 
		SearchHits hits = searchResponse.getHits();
		// 獲取命中次數,查詢結果有多少對象
		System.out.println("查詢結果有:" + hits.getTotalHits() + "條");
		Iterator<SearchHit> iterator = hits.iterator();
		while (iterator.hasNext()) { 
			SearchHit searchHit = iterator.next(); 
			// 每個查詢對象 
			System.out.println(searchHit.getSourceAsString());
			// 獲取字符串格式打印 
			System.out.println("title:" + searchHit.getSourceAsMap().get("title")); 
		}
	}
		

}

測試核心功能代碼:

	public static void main(String[] args) {
		ElasticSearchUtil util = new ElasticSearchUtil();
		ElasticSearchQuery query = new ElasticSearchQuery(util);
		query.termQuery("blog1", "article", "content", "搜索");
	}

 效果截圖:

1.6.2 字符串查詢

注意:ElasticSearchQuery  工具類補全字符串查詢方法

/**
	 * 字符串查詢
	 * @param indexName
	 * @param type
	 * @param field
	 * @param value
	 */
	public void stringQuery(String indexName, String type, String value) {
		Settings settings = util.getSettings("my-application");
		TransportClient client = util.getTransportClient(settings, "localhost", 9300);
		
		//2、設置搜索條件 
		SearchResponse searchResponse = client.prepareSearch(indexName) .setTypes(type) .setQuery(QueryBuilders.queryStringQuery(value)).get(); 
		//3、遍歷搜索結果數據 
		SearchHits hits = searchResponse.getHits();
		// 獲取命中次數,查詢結果有多少對象
		System.out.println("查詢結果有:" + hits.getTotalHits() + "條");
		Iterator<SearchHit> iterator = hits.iterator();
		while (iterator.hasNext()) { 
			SearchHit searchHit = iterator.next(); 
			// 每個查詢對象 
			System.out.println(searchHit.getSourceAsString());
			// 獲取字符串格式打印 
			System.out.println("title:" + searchHit.getSourceAsMap().get("title")); 
		}
	}

測試核心功能代碼:

 

	public static void main(String[] args) {
		ElasticSearchUtil util = new ElasticSearchUtil();
		ElasticSearchQuery query = new ElasticSearchQuery(util);
		query.stringQuery("blog1", "article", "搜索");
	}

效果截圖:

1.6.3 文檔ID查詢

注意:ElasticSearchQuery  工具類補全ID查詢方法

	/**
	 * id 查詢
	 * @param indexName
	 * @param type
	 * @param value
	 */
	public void idQuery(String indexName, String type, String id) {
		Settings settings = util.getSettings("my-application");
		TransportClient client = util.getTransportClient(settings, "localhost", 9300);
		
		//2、設置搜索條件 
		SearchResponse searchResponse = client.prepareSearch(indexName) .setTypes(type) .setQuery(QueryBuilders.idsQuery().addIds(id)).get(); 
		//3、遍歷搜索結果數據 
		SearchHits hits = searchResponse.getHits();
		// 獲取命中次數,查詢結果有多少對象
		System.out.println("查詢結果有:" + hits.getTotalHits() + "條");
		Iterator<SearchHit> iterator = hits.iterator();
		while (iterator.hasNext()) { 
			SearchHit searchHit = iterator.next(); 
			// 每個查詢對象 
			System.out.println(searchHit.getSourceAsString());
			// 獲取字符串格式打印 
			System.out.println("title:" + searchHit.getSourceAsMap().get("title")); 
		}
	}

測試核心功能代碼:

public static void main(String[] args) {
		ElasticSearchUtil util = new ElasticSearchUtil();
		ElasticSearchQuery query = new ElasticSearchQuery(util);
		query.idQuery("blog1", "article", "1");
	}

效果截圖:

1.7 查詢分頁document 

1.7.1 批量新增文檔

核心功能代碼:

package com.zzg.elasticsearch;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentType;

import com.alibaba.fastjson.JSONObject;

public class ElasticSearchBatch {
	private ElasticSearchUtil util;

	public ElasticSearchUtil getUtil() {
		return util;
	}

	public void setUtil(ElasticSearchUtil util) {
		this.util = util;
	}

	public ElasticSearchBatch(ElasticSearchUtil util) {
		super();
		this.util = util;
	}

	/**
	 * elasticSearch 批量插入
	 */
	public void batchInsert(String indexName, String type) {
		Settings settings = util.getSettings("my-application");
		TransportClient client = util.getTransportClient(settings, "localhost", 9300);

		
		for (int i = 2; i <= 100; i++) {
			// 描述json 數據
			Article article = new Article();
			article.setId(i);
			article.setTitle(i + "搜索工作其實很快樂");
			article.setContent(i
					+ "我們希望我們的搜索解決方案要快,我們希望有一個零配置和一個完全免費的搜索模式,我 們希望能夠簡單地使用JSON通過HTTP的索引數據,我們希望我們的搜索服務器始終可用,我們希望能夠一臺開始並擴展 到數百,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個雲的解決方案。Elasticsearch旨在解決所有這些 問題和更多的問題。");
			// 建立文檔
			client.prepareIndex(indexName, type, article.getId().toString())
					.setSource(JSONObject.toJSONString(article), XContentType.JSON).get();
		}
	}
	
	/**
	 * 定義數據內部類
	 * @author Administrator
	 *
	 */
	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;
		}
		
		
	}

}

測試核心功能代碼:

	public static void main(String[] args) {
		ElasticSearchUtil util = new ElasticSearchUtil();
		ElasticSearchBatch batch = new ElasticSearchBatch(util);
		batch.batchInsert("blog1", "article");
	}

效果截圖:

 1.7.2 關鍵字分頁查詢

注意:ElasticSearchQuery  工具類補全關鍵字分頁查詢功能

/**
	 * 關鍵字分頁查詢
	 */
	public void termQueryPage(String indexName, String type, String field, String value, int from, int size) {
		Settings settings = util.getSettings("my-application");
		TransportClient client = util.getTransportClient(settings, "localhost", 9300);
		
		//2、設置搜索條件 
		SearchResponse searchResponse = client.prepareSearch(indexName) .setTypes(type) .setQuery(QueryBuilders.termQuery(field, value))
				.setFrom(from)
				.setSize(size)
				.get(); 
		//3、遍歷搜索結果數據 
		SearchHits hits = searchResponse.getHits();
		// 獲取命中次數,查詢結果有多少對象
		System.out.println("查詢結果有:" + hits.getTotalHits() + "條");
		Iterator<SearchHit> iterator = hits.iterator();
		while (iterator.hasNext()) { 
			SearchHit searchHit = iterator.next(); 
			// 每個查詢對象 
			System.out.println(searchHit.getSourceAsString());
			// 獲取字符串格式打印 
			System.out.println("title:" + searchHit.getSourceAsMap().get("title")); 
		}
	}

測試核心功能代碼:

	public static void main(String[] args) {
	
		ElasticSearchUtil util = new ElasticSearchUtil();
		ElasticSearchQuery query = new ElasticSearchQuery(util);
		query.termQueryPage("blog1", "article", "content", "搜索", 0, 10);
	}
	

效果截圖:

字符串、ID查詢實現分頁,在查詢條件上補全分頁方法:    .setFrom(from) .setSize(size) 

1.8 高亮查詢

1.8.1 什麼是高亮顯示

在進行關鍵字搜索時,搜索出的內容中的關鍵字會顯示不同的顏色,稱之爲高亮。

1.8.2 高亮顯示功能實現

注意:ElasticSearchQuery  工具類補全關鍵字分頁高亮查詢功能

	/**
	 * 關鍵字查詢之高亮顯示
	 * @param indexName
	 * @param type
	 * @param field
	 * @param value
	 * @param from
	 * @param size
	 */
	public void termQueryHighlight(String indexName, String type, String field, String value, int from, int size) {
		Settings settings = util.getSettings("my-application");
		TransportClient client = util.getTransportClient(settings, "localhost", 9300);
		//設置高亮數據
				HighlightBuilder hiBuilder=new HighlightBuilder(); 
				hiBuilder.preTags("<font style='color:red'>"); 
				hiBuilder.postTags("</font>"); 
				hiBuilder.field("title"); 
		//2、設置搜索條件 
		SearchResponse searchResponse = client.prepareSearch(indexName) .setTypes(type) .setQuery(QueryBuilders.termQuery(field, value))
				.highlighter(hiBuilder)
				.get(); 
		
		//3、遍歷搜索結果數據 
		SearchHits hits = searchResponse.getHits();
		// 獲取命中次數,查詢結果有多少對象
		System.out.println("查詢結果有:" + hits.getTotalHits() + "條");
		Iterator<SearchHit> iterator = hits.iterator();
		while (iterator.hasNext()) { 
			SearchHit searchHit = iterator.next(); 
			System.out.println("String方式打印文檔搜索內容:"); 
			System.out.println(searchHit.getSourceAsString());
			System.out.println("Map方式打印高亮內容");
			System.out.println(searchHit.getHighlightFields());
			System.out.println("遍歷高亮集合,打印高亮片段:"); 
			if(searchHit.getHighlightFields() != null) {
				if(searchHit.getHighlightFields().get("title") != null) {
					Text[] text = searchHit.getHighlightFields().get("title").getFragments(); 
					for (Text str : text) { 
						System.out.println(str); 
					}	
					
				}
			}
			
		}
	}
測試核心功能代碼:
	public static void main(String[] args) {
		
		ElasticSearchUtil util = new ElasticSearchUtil();
		ElasticSearchQuery query = new ElasticSearchQuery(util);
		query.termQueryHighlight("blog1", "article", "content", "搜索", 0, 10);
	}

第二、Spring Data ElasticSearch 基礎操作之增刪改查

2.1 SpringData ElasticSearch 簡介

2.1.1 什麼是SpringData

Spring Data是一個用於簡化數據庫訪問,並支持雲服務的開源框架。其主要目標是使得對數據的訪問變得方便快
捷,並支持map-reduce框架和雲計算數據服務。 Spring Data可以極大的簡化JPA的寫法,可以在幾乎不用寫實現
的情況下,實現對數據的訪問和操作。除了CRUD外,還包括如分頁、排序等一些常用的功能。
Spring Data的官網:http://projects.spring.io/spring-data/
Spring Data常用的功能模塊如下:

 2.1.2 什麼是SpringData ElasticSearch

Spring Data ElasticSearch 基於 spring data API 簡化 elasticSearch操作,將原始操作elasticSearch的客戶端API 進行封裝 。Spring Data爲Elasticsearch項目提供集成搜索引擎。Spring Data Elasticsearch POJO的關鍵功能區域 爲中心的模型與Elastichsearch交互文檔和輕鬆地編寫一個存儲庫數據訪問層。

官方網站:http://projects.spring.io/spring-data-elasticsearch/

 2.1.3 SpringBoot 集成SpringData ElasticSearch

項目結構截圖:

elasticsearch-demo 之pom.xml 添加相關jar 包依賴:

<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>
	<parent>
		<groupId>com.zzg</groupId>
		<artifactId>elasticSearch-example</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>elasticsearch-demo</artifactId>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>

		<elasticsearch.version>6.3.2</elasticsearch.version>
		<spring.data.elasticsearch.version>3.1.0.RELEASE</spring.data.elasticsearch.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch</artifactId>
			<version>${elasticsearch.version}</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>transport</artifactId>
			<version>${elasticsearch.version}</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>elasticsearch-rest-client</artifactId>
			<version>${elasticsearch.version}</version>
		</dependency>
		<dependency>
			<groupId>org.elasticsearch.plugin</groupId>
			<artifactId>transport-netty4-client</artifactId>
			<version>${elasticsearch.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.data</groupId>
			<artifactId>spring-data-elasticsearch</artifactId>
			<version>${spring.data.elasticsearch.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>
	</dependencies>
</project>

程序入口:

package com.zzg;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;


@SpringBootApplication
public class Application extends SpringBootServletInitializer {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 SpringApplication.run(Application.class, args);
	}
	
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		// TODO Auto-generated method stub
		return builder.sources(Application.class);
	}
	

}

實體對象:

package com.zzg.entity;

import java.io.Serializable;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Document(indexName = "blog3", type = "article")
public class Article implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 5941564233618076170L;

	// @Id 文檔主鍵 唯一標識
	@Id
	// @Field 每個文檔的字段配置(類型、是否分詞、是否存儲、分詞器 )
	@Field(store = true, index = false, type = FieldType.Integer)
	private Integer id;

	@Field(index = true, analyzer = "ik_smart", store = true, searchAnalyzer = "ik_smart", type = FieldType.Text)
	private String title;

	@Field(index = true, analyzer = "ik_smart", store = true, searchAnalyzer = "ik_smart", type = FieldType.Text)
	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 Repository接口定義:

package com.zzg.repository;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

import com.zzg.entity.Article;

@Repository
public interface ArticleRepository extends ElasticsearchRepository<Article, Integer> {

}

實體對象服務定義及其實現類:

package com.zzg.service;

import java.util.List;

import org.springframework.data.domain.Page;

import com.zzg.entity.Article;

public interface ArticleService {
	long count();

	Article save(Article article);

    void delete(Article article);

    Iterable<Article> getAll();

    List<Article> getByName(String name);

    Page<Article> pageQuery(Integer pageNo, Integer pageSize, String kw);

}
package com.zzg.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Service;

import com.zzg.entity.Article;
import com.zzg.repository.ArticleRepository;
import com.zzg.service.ArticleService;

@Service
public class ArticleServiceImpl implements ArticleService {
	@Autowired
	private ArticleRepository repository;

	public long count() {
		// TODO Auto-generated method stub
		return repository.count();
	}

	public Article save(Article article) {
		// TODO Auto-generated method stub
		return repository.save(article);
	}

	public void delete(Article article) {
		// TODO Auto-generated method stub
		repository.delete(article);
	}

	public Iterable<Article> getAll() {
		// TODO Auto-generated method stub
		return repository.findAll();
	}

	public List<Article> getByName(String name) {
		// TODO Auto-generated method stub
		List<Article> list = new ArrayList<Article>();       
		MatchQueryBuilder matchQueryBuilder = new MatchQueryBuilder("content", name);
		Iterable<Article> iterable = repository.search(matchQueryBuilder);
		 
		iterable.forEach(item ->{
			list.add(item);
		});
		
		return list; 
	}

	public Page<Article> pageQuery(Integer pageNo, Integer pageSize, String kw) {
		// TODO Auto-generated method stub
		SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchPhraseQuery("content", kw)).withPageable(PageRequest.of(pageNo, pageSize)).build();
		return repository.search(searchQuery);  
	}

}

application.properties 配置文件定義:

spring.data.elasticsearch.cluster-name=my-application
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300

ElasticSearch Test功能代碼:

package com.zzg.test;

import java.util.List;

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.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.test.context.junit4.SpringRunner;

import com.zzg.entity.Article;
import com.zzg.service.ArticleService;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ElasticSearchTest {
	@Autowired
	private ArticleService commodityService;

	@Test
	public void contextLoads() {
		System.out.println(commodityService.count());
	}

	/** 測試保存文檔 */
	@Test
	public void saveArticle() {
		Article article = new Article();
		article.setId(100);
		article.setTitle("測試SpringData ElasticSearch");
		article.setContent(
				"Spring Data ElasticSearch 基於 spring data API 簡化 elasticSearch操 作,將原始操作elasticSearch的客戶端API 進行封裝 \n"
						+ " Spring Data爲Elasticsearch Elasticsearch項目提供集成搜索引擎");
		commodityService.save(article);
	}

	/** 測試保存 */
	@Test
	public void save() {
		Article article = new Article();
		article.setId(1001);
		article.setTitle("elasticSearch 3.0版本發佈");
		article.setContent("ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的 全文搜索引擎,基於RESTful web接口");
		commodityService.save(article);
	}

	/** 測試更新 */
	@Test
	public void update() {
		Article article = new Article();
		article.setId(1001);
		article.setTitle("elasticSearch 3.0版本發佈...更新");
		article.setContent("ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的 全文搜索引擎,基於RESTful web接口");
		commodityService.save(article);
	}

	/** 測試刪除 */
	@Test
	public void delete() {
		Article article = new Article();
		article.setId(1001);
		commodityService.delete(article);
	}

	/** 批量插入 */
	@Test
	public void save100() {
		for (int i = 1; i <= 99; i++) {
			Article article = new Article();
			article.setId(i);
			article.setTitle(i + "elasticSearch 3.0版本發佈..,更新");
			article.setContent(i + "ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用 戶能力的全文搜索引擎,基於RESTful web接口");
			commodityService.save(article);
		}
	}

	/** 查詢全部 */
	@Test
	public void findAll() {
		Iterable<Article> page = commodityService.getAll();

		page.forEach(item -> {
			System.out.println("content is:" + item.getContent());
		});
	}

	/**
	 * 條件查詢
	 */
	@Test
	public void findByName() {
		List<Article> list = commodityService.getByName("搜索");
		list.forEach(item -> {
			System.out.println("content is:" + item.getContent());
		});
	}

	/**
	 * 條件查詢
	 */
	@Test
	public void findPage() {
		Page<Article> page = commodityService.pageQuery(0, 10, "搜索");
		System.out.println(page.getTotalPages());
		System.out.println(page.getNumber());
		System.out.println(page.getContent());
	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章