@Great-Chinese
2016-07-26T06:44:48.000000Z
字数 6692
阅读 1432
Elasticsearch
红色,代表集群不可用黄色,代表集群可用不可复制绿色,代表集群正常
https://www.elastic.co/downloads/elasticsearch
tar -xvf elasticsearch-*.tar.gz

bin/plugin install license
bin/plugin install marvel-agent
Note
每个版本的安装命令都不同,具体参看最新官网文档,
https://www.elastic.co/downloads/marvel
bin/plugin install mobz/elasticsearch-head
bin/elasticsearch
bin/elasticsearch -d #后台启动
冒号后面必需预留一个空格
cluster.name: hksnode.name: hks_datanode.master: truenode.data: true#分片索引个数index.number_of_shards : 5#副本个数index.number_of_replicas : 1#索引文件路径,多个用逗号隔开path.data : /hksdata/java/elasticsearch/data#临时文件存储path.work : /hksdata/java/elasticsearch/tmp#日志文件路径path.logs : /hksdata/java/elasticsearch/logs#设置绑定ip,多个ip用逗号隔开,默认为本地network.host : 10.163.101.230,120.27.43.49http.port : 9200transport.tcp.port : 9300transport.tcp.compress : true#设置传输最大数据为100Mhttp.max_content_length : 10mb# 启用对外httphttp.enabled : true#es集群配置,数据自动复制discovery.zen.minimum_master_nodes: 2discovery.zen.ping.timeout: 10sdiscovery.zen.ping.multicast.enabled: truediscovery.zen.ping.unicast.hosts: ["10.163.101.230" , "10.45.19.14"]#配置IK分词器index.analysis.analyzer.default.type: ik
a、下载ik分词器已发布的版本 https://github.com/medcl/elasticsearch-analysis-ik/releases
b、安装maven
c、编译ik分词器
1、解压该zip到一个目录
进入改目录,输入命令
mvn clean install -Dmaven.test.skip=true
编译成功后会在target/releases目录下生成一个zip的文件,将这个文件复制到 es_home/plugins/analysis-ik 目录下(因为网络原因,一次可能编译不成功,可以尝试多次编译)

curl -XPUT http://10.163.101.230:9200/hksesdata/ -d' { "mappings": { "part":{ "properties": { "relation_code": { "type": "string", "index": "not_analyzed" }, "materialname": { "type": "string" }, "relation_brandid": { "type": "string","index": "not_analyzed" }, "relation_picno": { "type": "string","index": "not_analyzed" }, "relation_postion": { "type": "string","index": "not_analyzed" }, "relation_oecode": { "type": "string","index": "not_analyzed" }, "relation_cartypecode": { "type": "string","index": "not_analyzed" }, "brandcode": { "type": "string", "index": "not_analyzed" }, "originscode": { "type": "string", "index": "not_analyzed" }, "ecpunit": { "type": "string", "index": "not_analyzed" }, "relation_groupid": { "type": "string","index": "not_analyzed" } }
<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>2.3.2</version></dependency><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>19.0</version></dependency>
package org.es;import java.net.InetAddress;import java.util.Iterator;import java.util.Map;import org.elasticsearch.action.search.SearchRequestBuilder;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.action.search.SearchType;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.settings.Settings.Builder;import org.elasticsearch.common.transport.InetSocketTransportAddress;import org.elasticsearch.index.query.BoolQueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.search.SearchHit;import org.elasticsearch.search.SearchHits;import org.elasticsearch.search.aggregations.Aggregation;import org.elasticsearch.search.aggregations.AggregationBuilders;import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;import org.elasticsearch.search.aggregations.bucket.terms.Terms;import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder;import org.elasticsearch.search.sort.SortBuilders;public class ElasticSearchUtils {protected TransportClient client ;protected String index ;protected String type ;protected String idKey ;/*** 创建TransportClient* @param clusterName 集群名称* @param host 地址* @param port es端口* */TransportClient getTransportClient(String clusterName , String host , Integer port) throws Exception {Builder builder = Settings.builder().put("cluster.name", clusterName ) ;TransportClient client = TransportClient.builder().settings(builder).build().addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName( host ), port));return client ;}/*** 创建TransportClient* @param clusterName 集群名称* @param host 地址* @param port es端口 , 末日�?300* @param index 索引* @param type 类型* @param idKey 主名* */public static ElasticSearchUtils getElasticSearch(String clusterName, String host , Integer port , String index , String type , String idKey){try {ElasticSearchUtils search = new ElasticSearchUtils();search.client = search.getTransportClient(clusterName, host, port) ;search.idKey = idKey ;search.index = index ;search.type = type ;return search ;} catch(Exception e ) {throw new RuntimeException( e.getMessage() , e ) ;}}public static void main(String[] args) {ElasticSearchUtils searchUtils = ElasticSearchUtils.getElasticSearch("hks", "hksdata01", 9300, "hksesdata", "part", "id") ;/*创建搜索引擎*/SearchRequestBuilder requestBuilder = searchUtils.client.prepareSearch( searchUtils.index ).setTypes( searchUtils.type ) .setSearchType(SearchType.DEFAULT).setFrom(0).setSize( 20 ) ;/*指定排序字段,可以指定多个*/requestBuilder.addSort( SortBuilders.fieldSort("p1001_customertype2") );requestBuilder.addSort( SortBuilders.fieldSort("p1001_customertype2") );//requestBuilder.setQuery(QueryBuilders.matchPhraseQuery( "keyword" , "FDB" ));/*使用bool查询*/BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();/*设置查询*/requestBuilder.setQuery(//QueryBuilders.termsQuery("keyword", "FDB" , "鲁达" )boolQueryBuilder.must(QueryBuilders.matchQuery("keyword", "奥迪 Q5")));SearchResponse actionGet = requestBuilder.setExplain(true).execute().actionGet();SearchHits searchHits = actionGet.getHits() ;SearchHit[] hits = searchHits.getHits();System.out.println( "totalHits: " + searchHits.getTotalHits() );for (SearchHit hit : hits) {Map<String, Object> source = hit.getSource() ;if(null != source){System.out.println( source.get("materialcode") + "-->" + source.get("materialname"));}}/*---------------------分组 搜索------------------------*/SearchRequestBuilder searchRequestBuilder = searchUtils.client.prepareSearch( searchUtils.index ).setTypes( searchUtils.type ) .setSearchType(SearchType.DEFAULT).setFrom(0).setSize( 100 ) ;searchRequestBuilder.setQuery(//QueryBuilders.termsQuery("keyword", "FDB" , "鲁达" )boolQueryBuilder.must(QueryBuilders.matchQuery("keyword", "奥迪")));TermsBuilder partidTermsBuilder = AggregationBuilders.terms("postion").field("relation_postion") ;partidTermsBuilder.size( 100 );searchRequestBuilder.addAggregation( partidTermsBuilder );SearchResponse sr = searchRequestBuilder.execute().actionGet();Map<String, Aggregation> aggMap = sr.getAggregations().asMap() ;StringTerms postionTerms = (StringTerms) aggMap.get("postion") ;Iterator<Terms.Bucket> iterator = postionTerms.getBuckets().iterator();while(iterator.hasNext()){Bucket next = iterator.next();System.out.println( next.getKey() + "--->" + next.getDocCount());}}}