版本说明及准备工作:
es:6.7.2
我用的是IDEA的maven工程,需要将以下依赖添加到maven中
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.7.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.7.2</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.36.Final</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.1</version>
</dependency>
并且需要在工程的resources目录下增加log4j2.properties文件,文件内容如下:
appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
rootLogger.level = info
rootLogger.appenderRef.console.ref = console
Client端连接代码:
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class ElasticsearchUtils {
private TransportClient client;
public ElasticsearchUtils(String clusterName, String ipAddress) {
Settings settings = Settings.builder()
//集群名称
.put("cluster.name", clusterName)
.put("client.transport.ignore_cluster_name", false)
//是否自动检查其他节点
.put("client.transport.sniff", true)
.build();
try {
client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName(ipAddress), 9300));
//增加其它节点
// .addTransportAddress(new TransportAddress(InetAddress.getByName("host2"), 9300));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
在ElasticsearchUtils这个类下增加searcher方法,供后续查询使用
/**
* 执行搜索
*
* @param indexName 索引名称
* @param typeName 索引类型
* @param queryBuilder 查询条件
* @return
*/
public SearchResponse searcher(String indexName, String typeName,
QueryBuilder queryBuilder) {
SearchResponse searchResponse = client.prepareSearch(indexName)
.setTypes(typeName).setQuery(queryBuilder)
.setSize(20)//一次返回的最多条数,默认是10条
.execute()
.actionGet();//执行查询
client.close();
return searchResponse;
}
新增模糊查询类:
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.WildcardQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import java.util.Map;
public class ES_search {
public static void main(String[] args) {
//创建对象,设置集群名称和IP地址
ElasticsearchUtils es = new ElasticsearchUtils("ES",
"worknode1");
String indexName = "log";//索引名称
String typeName = "doc1";//类型名称
//模糊查询
//(1)查询条件:time字段中前缀为155977的数据,“*”表示0到多个字符,而使用“?”表示一个字符
WildcardQueryBuilder queryBuilder = QueryBuilders.wildcardQuery("time", "155977*");
//(2)执行查询
SearchResponse searchResponse = es.searcher(indexName, typeName,
queryBuilder);
//(3)解析结果
SearchHits hits = searchResponse.getHits();
SearchHit[] searchHits = hits.getHits();
for (SearchHit searchHit : searchHits) {
//返回符合条件的document数据
String document = searchHit.getSourceAsString();
System.out.println(document);
// //从map中取字段值,只是返回document中符合的字段值
// Map<String, Object> sourceAsMap = searchHit.getSourceAsMap();
// String documentTitle = (String) sourceAsMap.get("time");
// System.out.println(documentTitle);
}
}
}
返回的document数据图示:
返回的document中符合的字段值: