本文地址:http://blog.csdn.net/gumpeng/article/details/50414028
本文主要是基于java语言,描述如果建议一个Elasticsearch索引数据的简单过程。
新建一个名为test_mapping.json的文件,存放索引的schema,具体内容如下:
{
"mappings": {
"stock": {
"_id": {
"path": "id"
},
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string",
"index": "not_analyzed"
},
"companyDesc": {
"type": "string",
"analyzer": "standard"
}
}
}
}
}
然后,将schem注入到ES引擎中,具体代码如下:
public static String fileAsString(String file) throws IOException {
if (new File(file).exists()) {
CharSource mapping = Files.asCharSource(new File(file),
Charset.forName("utf-8"));
String str = mapping.read();
return str;
} else {
InputStream input = EsHelper.class.getClassLoader()
.getResourceAsStream(file);
if (input != null) {
String string = CharStreams.toString(new InputStreamReader(
input, "UTF-8"));
return string;
}
return null;
}
}
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(esHosts, 9300));
String index = "stock_simplest_demo";
CreateIndexRequest request = new CreateIndexRequest(index);
String source = fileAsString("test_mapping.json");
request.source(source);
client.admin().indices().create(request).actionGet();
String esHosts = "";
String clusterName = "";
String index = "stock_simplest_demo";
String type = "stock";
GsonBuilder gsonBuilder = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Gson gson = gsonBuilder.create();
Settings settings = ImmutableSettings.settingsBuilder()
.put("client.transport.sniff", true)
.put("cluster.name", clusterName).put("node.client", true)
.build();
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(esHosts, 9300));
BulkRequestBuilder bulkRequest = client.prepareBulk();
List stocks = new ArrayList();
stocks.add(new Stock("601390", "中国中铁","中国中铁股份有限公司是集基建建设、勘察设计与咨询服务、工程设备和零部件制造、房地产开发、铁路和公路投资及运营、矿产资源开发、物资贸易等业务于一体的多功能、特大型企业集团,也是中国和亚洲最大的多功能综合型建设集团。" ));
stocks.add(new Stock("601186", "中国铁建", "中国铁建股份有限公司(中文简称中国铁建,英文简称 CRCC),由中国铁道建筑总公司独家发起设立,于2007 年11月5 日在北京成立,为国务院国有资产监督管理委员会管理的特大型建筑企业。"));
stocks.add(new Stock("601766", "中国中车", "中国中车股份有限公司(中文简称“中国中车”,英文简称缩写“CRRC”)是经国务院同意,国务院国资委批准,由中国北车股份有限公司、中国南车股份有限公司按照对等原则合并组建的A+H股上市公司。"));
stocks.add(new Stock("600115", "东方航空", "中国东方航空股份有限公司(China Eastern Airlines)是一家总部位于中国上海的国有控股航空公司,在原中国东方航空集团公司的基础上,兼并中国西北航空公司,联合中国云南航空公司重组而成。"));
stocks.add(new Stock("000527", "美的电器", "创业于1968年的美的集团,是一家以家电业为主,涉足房产、物流等领域的大型综合性现代化企业集团,旗下拥有两家上市公司、四大产业集团,是中国最具规模的白色家电生产基地和出口基地。"));
for (Stock stock : stocks) {
JsonObject jo = (JsonObject) gson.toJsonTree(stock);
String jsonSource = gson.toJson(jo);
bulkRequest.add(client.prepareIndex(index, type, stock.getId()).setSource(jsonSource));
}
BulkResponse bulkResponse = bulkRequest.execute().actionGet();
其中第一行的esHosts和第二行的clusterName需要根据自己的ES集群配置自行设定(下同)。
数据建完索引后,就可以使用搜索功能啦。
String input = "铁建"
String clusterName = "";
String esHosts = "";
Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.sniff", true).put("cluster.name", clusterName).put("node.client", true).build();
Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(esHosts, 9300));
String[] fields = {"name", "companyDesc"};
BoolQueryBuilder boolMatchQueryBuilder = QueryBuilders.boolQuery();
MultiMatchQueryBuilder mmb = QueryBuilders.multiMatchQuery(input, fields);
//Indicates that this percent of the total number of optional clauses are necessary.
//The number computed from the percentage is rounded down and used as the minimum.
mmb.minimumShouldMatch("70%");
boolMatchQueryBuilder.must(mmb);
MultiMatchQueryBuilder mmbph = QueryBuilders.multiMatchQuery(input, fields);
mmbph.type(MultiMatchQueryBuilder.Type.PHRASE);
boolMatchQueryBuilder.should(mmbph);
QueryBuilder query = QueryBuilders.filteredQuery(mmb, null);
SearchRequestBuilder srb = client.prepareSearch(index).setTypes(type).setQuery(query);
SearchResponse response = srb.execute().actionGet();
System.out.println(response);
上段代码的输出效果如下所示:
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 3,
"max_score" : 0.581694,
"hits" : [ {
"_index" : "stock_simplest_demo",
"_type" : "stock",
"_id" : "601186",
"_score" : 0.581694,
"_source":{"id":"601186","name":"中国铁建","companyDesc":"中国铁建股份有限公司(中文简称中国铁建,英文简称 CRCC),由中国铁道建筑总公司独家发起设立,于2007 年11月5 日在北京成立,为国务院国有资产监督管理委员会管理的特大型建筑企业。"}
}, {
"_index" : "stock_simplest_demo",
"_type" : "stock",
"_id" : "601390",
"_score" : 0.08961828,
"_source":{"id":"601390","name":"中国中铁","companyDesc":"中国中铁股份有限公司是集基建建设、勘察设计与咨询服务、工程设备和零部件制造、房地产开发、铁路和公路投资及运营、矿产资源开发、物资贸易等业务于一体的多功能、特大型企业集团,也是中国和亚洲最大的多功能综合型建设集团。"}
}, {
"_index" : "stock_simplest_demo",
"_type" : "stock",
"_id" : "601766",
"_score" : 0.022839066,
"_source":{"id":"601766","name":"中国中车","companyDesc":"中国中车股份有限公司(中文简称“中国中车”,英文简称缩写“CRRC”)是经国务院同意,国务院国资委批准,由中国北车股份有限公司、中国南车股份有限公司按照对等原则合并组建的A+H股上市公司。"}
} ]
}
}