ElasticSearch是一个接近实时的搜索平台,它利用Lucese进行文档索引。
本文会写个可以运行的简单例子,方便大家上手,日后深入了解。
需要引入maven依赖
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.1.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.0</version>
</dependency>
然后是测试主程序
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Created by joe on 2017/9/25.
*/
public class ElasticSearch {
public static void main(String[] args) {
TransportClient client;
Settings esSettings = Settings.builder()
.put("cluster.name", "elasticsearch") //设置ES实例的名称
.put("client.transport.sniff", true) //自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中
.build();
client = new PreBuiltTransportClient(esSettings);//初始化client较老版本发生了变化,此方法有几个重载方法,初始化插件等。
//此步骤添加IP,至少一个,其实一个就够了,因为添加了自动嗅探配置
try {
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
} catch (UnknownHostException e) {
e.printStackTrace();
}
Map<String,Object> infoMap = new HashMap<String, Object>();
infoMap.put("name", "广告信息11");
infoMap.put("title", "我的广告22");
infoMap.put("createTime", new Date());
infoMap.put("count", 1022);
IndexResponse indexResponse = client.prepareIndex("test", "info","100").setSource(infoMap).
execute().actionGet();
QueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("count").gt(50);
SearchResponse searchResponse = client.prepareSearch("test")
.setTypes("info")
.setQuery(rangeQueryBuilder)
.addSort("count", SortOrder.DESC)
.setSize(20)
.execute()
.actionGet();
SearchHits hits = searchResponse.getHits();
System.out.println("查到记录数:" + hits.getTotalHits());
SearchHit[] searchHists = hits.getHits();
if(searchHists.length>0){
for(SearchHit hit:searchHists){
String name = (String) hit.getSource().get("name");
Integer age = (Integer)hit.getSource().get("count");
String date = (String) hit.getSource().get("createTime");
System.out.format("name:%s ,count :%d, createTime:%s\n", name, age, date);
}
}
}
}
不要忘了配置 log4j2.properties
appender.console.type = Console appender.console.name = console appender.console.layout.type = PatternLayout rootLogger.level = info rootLogger.appenderRef.console.ref = console
以上就可以了。
tips: jdk8以下可能会遇到问题。
浙公网安备 33010602011771号