您的位置:首页 > 其它

ElasticSearch学习笔记 安装 配置

2017-04-23 22:54 525 查看
先附上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 -zxvfelasticsearch-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


(4)启动elasticsearch
./bin/elasticsearch
使用jps查看是否启动成功
(5)用浏览器访问 http://{你的ip}/_plugin/head,如下图所示:


二.使用
在此用java将article.json 存入es建立索引,主要代码如下:
import org.apache.commons.
9410
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<String, Object> hashMap = new HashMap<String, Object>();
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<String, Object> 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("<font color='red' >");
//设置高亮后缀
builder.setHighlighterPostTags("</font>");
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<String, Object> map = new HashMap<String,Object>();
SearchHit[] hits2 = hits.getHits();
map.put("count", total);
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for (SearchHit searchHit : hits2) {
Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
HighlightField highlightField = highlightFields.get("title");
Map<String, Object> 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<String, Object> search = Esutil.search("hbase", "tfjt", "doc", 0, 10);
//		List<Map<String, Object>> list = (List<Map<String, Object>>) search.get("dataList");
//	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: