maven坐标
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.5.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
客户端连接
@Configuration
public class ElasticsearchConfig {
private static final Logger logger = LoggerFactory.getLogger(ElasticsearchConfig.class);
@Value("${ElasticSearchServerIp}")
String ElasticSearchServerIp;
@Bean
public TransportClient client(){
TransportClient client = null;
try {
InetSocketTransportAddress node = new InetSocketTransportAddress(
InetAddress.getByName(ElasticSearchServerIp),9300
);
Settings settings = Settings.builder()
.put("cluster.name","elasticsearch")
.build();
client = new PreBuiltTransportClient(settings);
client.addTransportAddress(node);
} catch (UnknownHostException e) {
e.printStackTrace();
}
return client;
}
}
更新操作
JSONObject jsonObject = new JSONObject();
jsonObject,put("key","value");
this.client.prepareUpdate("index","type",id)
.setDoc(jsonObject.toString(), XContentType.JSON).get();
删除操作
DeleteResponse response = this.client.prepareDelete("index", "type",id).get();
查找-高亮
@RequestMapping("/activity/conditionalQuery")
@ResponseBody
public Map searchByKeyWord() {
if (StringUtils.isEmpty(keyword)) {
return ReturnResult.errorResult("查询字段或者关键字为空");
}
Integer from = pageSize * (pageNum - 1);
HighlightBuilder highlightBuilder = null;
if (StringUtils.isNotEmpty(preTags) && StringUtils.isNotEmpty(postTags)) {
highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false);
highlightBuilder.preTags(preTags);
highlightBuilder.postTags(postTags);
}
SortBuilder sortBuilder = SortBuilders.fieldSort("start_time").order(SortOrder.DESC);
SearchRequestBuilder searchRequestBuilder = this.client.prepareSearch("huiyizhan");
searchRequestBuilder.setTypes("activity");
if (highlightBuilder != null) {
searchRequestBuilder.highlighter(highlightBuilder);
}
String[] needHighLightFields;
if (isMobile) {
MultiMatchQueryBuilder queryMobile = QueryBuilders.multiMatchQuery(keyword,culoum);
needHighLightFields = this.culoum;
searchRequestBuilder.setQuery(queryMobile);
searchRequestBuilder.addSort(sortBuilder);
}
else {
String fieldLine = CamelCaseUtil.toLine(field);
needHighLightFields = new String[]{fieldLine};
BoolQueryBuilder shouldPC = QueryBuilders.boolQuery().should(QueryBuilders.matchQuery(fieldLine, keyword));
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("start_time").gt("now" + range);
if (range.indexOf("null") == -1) {
shouldPC.should(rangeQuery);
}
if (isSort) {
searchRequestBuilder.addSort(sortBuilder);
}
searchRequestBuilder.setFrom(from);
searchRequestBuilder.setSize(pageSize);
searchRequestBuilder.setQuery(shouldPC);
}
SearchResponse response = searchRequestBuilder.get();
Long totalHits = response.getHits().totalHits;
if (totalHits == 0 || response == null) {
return ReturnResult.errorResult("查询结果不存在");
}
List<Map<String, Object>> res = new ArrayList<>();
for (SearchHit hit : response.getHits()) {
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
Map<String, Object> source = hit.getSource();
if (highlightFields != null && highlightFields.size() != 0) {
for (String needHighLightField : needHighLightFields) {
HighlightField titleField = highlightFields.get(needHighLightField);
if (titleField != null) {
Text[] fragments = titleField.fragments();
if (fragments != null && fragments.length != 0) {
StringBuilder name = new StringBuilder();
for (Text text : fragments) {
name.append(text);
}
source.put(needHighLightField, name.toString());
}
}
}
}
res.add(hit.getSource());
}
PageInfo pageInfo = new PageInfo(res, pageNum, pageSize, totalHits);
return ReturnResult.successResult("data", pageInfo, ReturnType.GET_SUCCESS);
}