1.TransportClient对象的创建:
myClusterName:集群的名称
2.Index的创建:
String json = "{\"analysis\":" + "{\"analyzer\":" +"{\"ik_pinyin_analyzer\":"
+ "{\"tokenizer\":\"ik_max_word\"," + "\"filter\":[\"my_pinyin\",\"word_delimiter\"]}},"
+ "\"filter\":{\"my_pinyin\" : "
+ "{\"type\":\"pinyin\",\"first_letter\":\"prefix\",\"padding_char\":\" \" }}}}";
client.admin().indices().prepareCreate(indexName).setSettings(json).get();
json字符串中,设置ik,拼音分词 ; indexName:索引的名称
3.mapping的创建:
String json="{\""+typeName+"\":{\"properties\":"
+ "{\"name\": {\"type\":\"keyword\",\"fields\": {\"pinyin\":{\"type\":\"text\",\"analyzer\":"+"\"ik_pinyin_analyzer\"}}}}}}";
client.admin().indices().preparePutMapping(indexName).setType(typeName).setSource(json).get();
typeName:type的名称
4.添加模拟数据:
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject().field(column, value).endObject();
client.prepareIndex(indexName, typeName).setSource(builder).get();
5.测试:
QueryBuilder query=QueryBuilders.termQuery("name.pinyin", "搜索的词");
HighlightBuilder hiBuilder=new HighlightBuilder();
hiBuilder.preTags("<h2>");
hiBuilder.postTags("</h2>");
hiBuilder.field("name.pinyin");
// 搜索数据
SearchResponse resp= client.prepareSearch(index).setTypes(type).setQuery(query).highlighter(hiBuilder).execute().actionGet();
//获取查询结果集
SearchHits searchHits = resp.getHits();
System.out.println("共搜到:"+searchHits.getTotalHits()+"条结果!");
//遍历结果
for(SearchHit hit:searchHits){
System.out.println("String方式打印文档搜索内容:");
System.out.println(hit.getSourceAsString());
if(null != hit && null != hit.getHighlightFields() && hit.getHighlightFields().size() > 0 ){
System.out.println("遍历高亮集合,打印高亮片段:");
Text[] text = hit.getHighlightFields().get("name.pinyin").getFragments();
for (Text str : text) {
System.out.println(str.string());
}
}
}