TestElasticsearchBoost

package com.itheima.elasticsearch.test;

import java.awt.MultipleGradientPaint;
import java.io.IOException;
import java.net.InetAddress;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHitField;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.highlight.HighlightField;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Before;
import org.junit.Test;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.elasticsearch.domain.Article;

public class TestElasticsearchBoost {

private Client client;


/**获取Transport Client
 * @throws Exception */
@Before
public void getClient() throws Exception{
	// ElasticSearch 服务默认端口 9300
	client = TransportClient.builder().build().addTransportAddress(new InetSocketTransportAddress(
			InetAddress.getByName("127.0.0.1"),9300));
}


/**
 * 10.1.索引相关操作 (IK分词)
 * * 创建索引
 * * 删除索引
 */
@Test
public void testCreateIndex() throws Exception{
	// 创建索引
	client.admin().indices().prepareCreate("blog1").get();
	//关闭
	client.close();
}

/**
 * 创建映射
 */
@Test
public void testCreateIndexMapping() throws Exception{
	//构建json的数据格式,创建映射
	XContentBuilder mappingBuilder = XContentFactory.jsonBuilder()
			.startObject()
				.startObject("article")
					.startObject("properties")
						.startObject("id")
							.field("type","integer").field("store", "yes")
						.endObject()
						.startObject("title")
							.field("type","string").field("store", "yes").field("analyzer","ik")
						.endObject()
						.startObject("content")
							.field("type","string").field("store", "yes").field("analyzer","ik")

// .field(“type”,“string”).field(“store”, “yes”).field(“analyzer”,“ik”).field(“boost”,10)
.endObject()
.startObject(“comment”)
.field(“type”,“string”).field(“store”, “yes”).field(“analyzer”,“ik”)
.endObject()
.endObject()
.endObject()
.endObject();
PutMappingRequest request = Requests.putMappingRequest(“blog1”)
.type(“article”)
.source(mappingBuilder);
client.admin().indices().putMapping(request).get();
//关闭
client.close();
}

/**使用Jackson(处理对象和json数据之间的转换),创建文档
 * @throws Exception */
@Test
public void createDocumentJacksonMapping() throws Exception{
	
	Article article = new Article();

// article.setId(1);
// article.setTitle(“搜索引擎服务器”); // 有搜索
// article.setContent(“基于restful的数据风格”); // 无搜索
// article.setComment(“我们学习Elasticsearch搜索引擎服务器”);// 有搜索

	article.setId(2);
	article.setTitle("什么是Elasticsearch"); // 无搜索
	article.setContent("Elasticsearch搜索引擎服务器"); // 有搜索
	article.setComment("Elasticsearch封装了lucene");// 无搜索
	
	ObjectMapper objectMapper = new ObjectMapper();
	String source = objectMapper.writeValueAsString(article);
	System.out.println("source:"+source);
	
	IndexResponse indexResponse = client.prepareIndex("blog1", "article", article.getId().toString()).setSource(source).get();
	// 获取响应的信息
	System.out.println("索引名称:"+indexResponse.getIndex());
	System.out.println("文档类型:"+indexResponse.getType());
	System.out.println("ID:"+indexResponse.getId());
	System.out.println("版本:"+indexResponse.getVersion());
	System.out.println("是否创建成功:"+indexResponse.isCreated());
	client.close();
}



/**
 * SearchResponse获取,支持各种查询:IK分词器后的查询
 */
@Test
public void testQueryString() throws Exception{
	SearchResponse searchResponse = client.prepareSearch("blog1")
			.setTypes("article")
			// 在3个字段上完成搜索
			.setQuery(QueryBuilders.queryStringQuery("搜索").field("content^10").field("title^5").field("comment"))
			.get();
	SearchHits hits = searchResponse.getHits();
	
	this.searchValue(hits);
	//关闭
	client.close();
}

/**
 * SearchResponse获取,支持各种查询:IK分词器后的查询
 */
@Test
public void testBoolQuery() throws Exception{
	SearchResponse searchResponse = client.prepareSearch("blog1")
			.setTypes("article")
			// 在3个字段上完成搜索
			.setQuery(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("title", "搜索").boost(5f))
					.should(QueryBuilders.termQuery("content", "搜索").boost(10f))
					.should(QueryBuilders.termQuery("comment", "搜索")))
			.get();
	SearchHits hits = searchResponse.getHits();
	
	this.searchValue(hits);
	//关闭
	client.close();
}




// 显示查询的结果数据
private void searchValue(SearchHits hits) {
	System.out.println("查询的结果数量有"+hits.getTotalHits()+"条");
	System.out.println("结果中最多的分数:"+hits.getMaxScore());
	// 遍历每条数据
	Iterator iterator = hits.iterator();
	while(iterator.hasNext()){
		SearchHit searchHit = iterator.next();
		// System.out.println("所有的数据JSON的数据格式:"+searchHit.getSourceAsString());
		System.out.println("当前文章的得分:"+searchHit.getScore());
		// 获取每个字段的数据
		System.out.println("id:"+searchHit.getSource().get("id"));
		System.out.println("title:"+searchHit.getSource().get("title"));
		System.out.println("content:"+searchHit.getSource().get("content"));
		System.out.println("comment:"+searchHit.getSource().get("comment"));
		System.out.println("**********************************************");
		for(Iterator ite = searchHit.iterator();ite.hasNext();){
			SearchHitField next = ite.next();
			System.out.println(next.getValues());
		}
	}
}

}

你可能感兴趣的:(code)