ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch
java简单示例:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequestBuilder;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.Requests;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
/*********************************************************************************
//*
//* Filename: ESClient.java
//* Revision: 1.0
//* Author: <makun>
//* Created On: 2015年10月29日
//* Modified by:
//* Modified On:
//*
//* Description: <description>
/********************************************************************************/
public class ESClient {
private Client client;
public void init() {
// client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("ip", 9300));
//172.30.150.102----------9300
//172.30.150.101----------9300
client = elasticsearchClient();
}
public Client elasticsearchClient() {
TransportClient esClient = new TransportClient(buildNodeSettings());
esClient.addTransportAddress(new InetSocketTransportAddress("ip", 9300));
return esClient;
}
public void close() {
client.close();
}
private Settings buildNodeSettings() {
Map<String, String> settings = new HashMap<String, String>();
settings.put("cluster.name", "elasticsearch");
ImmutableSettings.Builder builder = ImmutableSettings.settingsBuilder().put(settings);
return builder.build();
}
/**
* 创建索引
*/
public void createIndex() {
List<String> jsondata = DataFactory.getInitJsonData();
for (int i = 0 ; i < jsondata.size() ; i++) {
client.prepareIndex("mk_data", "t_account", String.valueOf(i)).setSource(jsondata.get(i)).execute().actionGet();
}
System.out.println("createIndex successful.");
}
/**
* 删除索引
*/
public void deleteIndex() {
// DeleteResponse response = client.prepareDelete("mk_data", "t_account", "0") .setOperationThreaded(false).execute().actionGet();
client.prepareDelete("mk_data", "t_account", "0").setOperationThreaded(false).execute().actionGet();
System.out.println("deleteIndex successful.");
}
/**
* 修改
* @param model
* @param indexName
* @param typeName
* @param id
*/
public void update(Medicine model, String indexName, String typeName, String id) {
IndexRequest indexRequest = new IndexRequest();
indexRequest.source(JsonHelper.toJsonString(model));
UpdateRequestBuilder updateRequestBuilder = client.prepareUpdate(indexName, typeName, id);
updateRequestBuilder.setDoc(indexRequest).execute().actionGet();;
System.out.println("updateIndex successful.");
}
/**
* 修改,如果不存在,新增
* @param model
* @param indexName
* @param typeName
* @param id
*/
public void upsert(Medicine model, String indexName, String typeName, String id) {
IndexRequest indexRequest = new IndexRequest();
indexRequest.source(JsonHelper.toJsonString(model));
UpdateRequestBuilder updateRequestBuilder = client.prepareUpdate(indexName, typeName, id);
updateRequestBuilder.setDocAsUpsert(true).setUpsert(indexRequest).setDoc(indexRequest).execute().actionGet();;
System.out.println("upsertIndex successful.");
}
public void refresh(String indexName) {
client.admin().indices().refresh(Requests.refreshRequest(indexName)).actionGet();
}
/**
* 执行搜索
* @param queryBuilder
* @param indexname
* @param type
* @return
*/
public List<Medicine> searcher(QueryBuilder queryBuilder, String indexname, String type) {
List<Medicine> list = new ArrayList<Medicine>();
SearchResponse searchResponse = client.prepareSearch(indexname).setTypes(type).setQuery(queryBuilder).execute().actionGet();
SearchHits hits = searchResponse.getHits();
System.out.println("查询到记录数=" + hits.getTotalHits());
SearchHit[] searchHists = hits.getHits();
if (searchHists.length > 0) {
for (SearchHit hit : searchHists) {
Integer id = (Integer) hit.getSource().get("id");
String name = (String) hit.getSource().get("name");
String function = (String) hit.getSource().get("funciton");
list.add(new Medicine(id, name, function));
}
}
return list;
}
/**
* 查询
*/
public void search() {
SearchRequestBuilder builder = client.prepareSearch("mk_data").setTypes("t_account").setSearchType(SearchType.DEFAULT).setFrom(0).setSize(100);
BoolQueryBuilder qb = QueryBuilders.boolQuery().must(new QueryStringQueryBuilder("止咳糖浆").field("name")).should(new QueryStringQueryBuilder("止咳糖浆").field("function"));
builder.setQuery(qb);
SearchResponse response = builder.execute().actionGet();
System.out.println(" " + response);
}
public static void main(String[] args) {
ESClient client = new ESClient();
String indexName = "mk_data";
String typeName = "t_account";
client.init();
// QueryBuilder queryBuilder = QueryBuilders.matchPhraseQuery("name", "感冒");
// List<Medicine> result = client.searcher(queryBuilder, indexName, typeName);
// System.out.println(result.size());
// client.createIndex();
// client.search();
// client.deleteIndex();
Medicine model = new Medicine();
model.setId(1);
model.setName("发烧 发烧 发烧");
model.setFunction("万通筋骨灵");
client.update(model, indexName, typeName, model.getId().toString());
client.refresh(indexName);
client.close();
}
}
JSONUTILS
import com.fasterxml.jackson.databind.ObjectMapper;
/*********************************************************************************
//*
//* Filename: JsonUtils.java
//* Revision: 1.0
//* Author: makun
//* Created On: 2015年10月30日
//* Modified by:
//* Modified On:
//*
//* Description: <description>
/********************************************************************************/
public class JsonUtils {
public static <T> T fromJsonString(String str, Class<?> clazz) {
ObjectMapper objectMapper = new ObjectMapper();
try {
return (T) objectMapper.readValue(str, clazz);
}
catch (Exception e) {
LogUtils.error(e, "JsonUtils fromJsonString error");
return null;
}
}
public static String toJsonString(Object object) {
ObjectMapper objectMapper = new ObjectMapper();
try {
return objectMapper.writeValueAsString(object);
}
catch (Exception e) {
LogUtils.error(e, "JsonUtils toJsonString error");
return "";
}
}
}
分享到:
相关推荐
(狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...
es-head是一个针对Elasticsearch的可视化操作插件。它提供了一个便捷的操作工具,可以连接Elasticsearch搜索引擎,并提供可视化的操作页面,对Elasticsearch进行各种设置和数据检索功能的管理。 es-head 插件可以在...
docker run --name elasticsearch7.16.3 -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" -v /Users/xingyue/Home/xingyue/学习/工程化/es/elasticsearch.yml:/usr/share/elastic...
elasticSearch(ES) 最新版ik分词插件7.10 elasticsearch-analysis-ik-7.10.0
elasticsearch-analysis-pinyin-7.4.0 es拼音分词器7.4.0
arcgis elasticSearch es 矢量数据导入插件 数据建模 mapping indexsetting 字段映射 索引建模支持geoshape、shape,text索引支持keyword/ngram/edgeNgram/ikSmart,快速导入,兼容multipolygon,带洞,多面,使用时...
开箱即用,简单粗暴...我们本机启动两个es实例,也就是两个node节点,默认集群名称是elasticsearch,所以他会自动将这两个node凑成一个集群,我们什么都不用配置,它自动发现。shard负载均衡假设我们有1个index,
十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统。 什么是elasticsearch Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能。 大名鼎鼎的Lucene 搜索引擎被广泛用于搜索...
Elasticsearch Demo 读取word内容写入到Es上并展示在WebFrom页面上,简单查询根据关键字检索 并高亮显示。
用于elasticsearch7.17.3这个版本的ik中文分词器,考虑到官网有时网络不稳定下载不下来,这里特意上传,方便大家使用; 目录结构如下: config -- 文件夹 plugin-security.policy plugin-descriptor.properties ...
消费kafka数据,然后批量导入到Elasticsearch,本例子使用的kafka版本0.10,es版本是6.4,使用bulk方式批量导入到es中,也可以一条一条的导入,不过比较慢。 <groupId>org.elasticsearch <artifactId>elastic...
springboot整合elasticsearch7,进行数据同步。elasticsearch相关度查询、排序。高亮显示;自动补全等功能。代码仅供参考,代码中有具体的注释,可以根据代码及注释内容,对自己项目架构及业务进行修改、整合。
Elasticsearch(ES)多条件过滤实现案例(6.3版本), 搜索过滤,对日期进行时分秒区间判断,多条件整合优化
ES(elasticSearch6.4.0)之java API源码demo-完整注释版,本版本为上一demo版本升级版,封装了ES的javaAPI,支持了模糊查询,排序查询,解析,分页查询等功能,如果有问题请留言。我会及时回复。
elasticsearch-8.2.3 windows 版本。 Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的...
linux命令行elasticsearch查询工具es2unix
适用于7.17.1系列,例如Elasticsearch的7.17.12版本。 elasticsearch-analysis-ik 是一个常用的中文分词器,在 Elasticsearch 中广泛应用于中文文本的分析和搜索。下面是 elasticsearch-analysis-ik 分词器的几个...
elasticsearch-7.17.6及对应版本IK分词 适合人群:elasticsearch初学者 Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elastic...
elasticsearch启动后自动关闭:max virtual memory areas vm.max_map_count [65530] is too low, increase to at… elasticsearch 我遇到的问题是用docker 启动elasticsearch后会自动关闭,具体关闭时间点没注意,...
在数据抽取 ELT 领域,ES 全家桶 ELK(Elasticsearch+Logstash+Kibana)赫赫有名。 Elasticsearch 基本概念: * 倒排索引:Elasticsearch 为什么快,核心设计理念就是采用了倒排索引机制。倒排索引的方式是,根据 ...