ElasticSearch学习笔记 安装 配置

先附上api和中文文档的地址:
ESAPI: https://es.xiaoleilu.com/010_Intro/15_API.html
中文文档 http://www.learnes.net/getting_started/tutorial_indexing.html
一.安装(单节点)
目前用的是2.2.0版本的,最新是5.3.0不太会用,以后再进行升级
 最新版本的下载地址: https://www.elastic.co/downloads/elasticsearch
2.2.0 下载地址:https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.2.0/elasticsearch-2.2.0.tar.gz
(1)进入下载目录解压 tar -zxvf elasticsearch-2.2.0.tar.gz
(2)修改配置文件 [hadoop@hadoop01 elasticsearch-2.2.0]$ vi config/elasticsearch.yml 
http.port: 9200
transport.tcp.port: 9300
network.host: 192.168.237.11
node.name: hadoop01
cluster.name: elasticsearch (注意冒号后面一定要有空格)
(3)安装head插件(类似于mysql的navicate客户端)
[hadoop@hadoop01 elasticsearch-2.2.0]$ ./bin/plugin install mobz/elasticsearch-head ElasticSearch学习笔记 安装 配置_第1张图片
(4)启动elasticsearch
./bin/elasticsearch
使用jps查看是否启动成功
(5)用浏览器访问 http://{你的ip}/_plugin/head,如下图所示:
ElasticSearch学习笔记 安装 配置_第2张图片
二.使用
在此用java将article.json 存入es建立索引,主要代码如下:
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.highlight.HighlightField;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Esutil {
	public static Client client = null;

		/**
		 * 获取客户端
		 * @return
		 */
		public static  Client getClient() {
			if(client!=null){
				return client;
			}
			Settings settings = Settings.settingsBuilder().put("cluster.name", "elasticsearch").put("client.transport.sniff", true).build();
			try {
				client = TransportClient.builder().build()
						.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.237.11"), 9300));
					} catch (UnknownHostException e) {
				e.printStackTrace();
			}
			return client;
		}

	
	
	
	public static String addIndex(String index,String type,Article article){
		HashMap hashMap = new HashMap();
		hashMap.put("id", article.getId());
		hashMap.put("title", article.getTitle());
		hashMap.put("url", article.getUrl());
		hashMap.put("content", article.getContent());
		IndexResponse response = getClient().prepareIndex(index, type).setSource(hashMap).execute().actionGet();
		return response.getId();
	}
	
	
	public static Map search(String key,String index,String type,int start,int row){
		SearchRequestBuilder builder = getClient().prepareSearch(index);
		builder.setTypes(type);
		builder.setFrom(start);
		builder.setSize(row);
		//设置高亮字段名称
		builder.addHighlightedField("title");
		//builder.addHighlightedField("describe");
		//设置高亮前缀
		builder.setHighlighterPreTags("");
		//设置高亮后缀
		builder.setHighlighterPostTags("");
		builder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
		if(StringUtils.isNotBlank(key)){
			builder.setQuery(QueryBuilders.multiMatchQuery(key, "title","content"));
		}
		builder.setExplain(true);
		SearchResponse searchResponse = builder.get();
		
		SearchHits hits = searchResponse.getHits();
		long total = hits.getTotalHits();
		Map map = new HashMap();
		SearchHit[] hits2 = hits.getHits();
		map.put("count", total);
		List> list = new ArrayList>();
		for (SearchHit searchHit : hits2) {
			Map highlightFields = searchHit.getHighlightFields();
			HighlightField highlightField = highlightFields.get("title");
			Map source = searchHit.getSource();
			if(highlightField!=null){
				Text[] fragments = highlightField.fragments();
				String name = "";
				for (Text text : fragments) {
					name+=text;
				}
				source.put("title", name);
			}
			HighlightField highlightField2 = highlightFields.get("describe");
			if(highlightField2!=null){
				Text[] fragments = highlightField2.fragments();
				String describe = "";
				for (Text text : fragments) {
					describe+=text;
				}
				source.put("content", describe);
			}
			list.add(source);
		}
		map.put("dataList", list);
		return map;
	}

//	public static void main(String[] args) {
//		Map search = Esutil.search("hbase", "tfjt", "doc", 0, 10);
//		List> list = (List>) search.get("dataList");
//	}
}



你可能感兴趣的:(大数据)