java使用es

//创建连接工具类
public class ESClientConnectionUtil {
    public static TransportClient client=null;
    public final static String HOST = "192.168.200.211"; //服务器部署
    public final static Integer PORT = 9301; //端口
    public static TransportClient  getESClientConnection(){
    if (client == null) {
            System.setProperty("es.set.netty.runtime.available.processors", "false");
            try {
                //设置集群名称
                Settings settings = Settings.builder().put("cluster.name", "es5").put("client.transport.sniff",                   true).build();
                //创建client
                client = new PreBuiltTransportClient(settings).addTransportAddress(new                        InetSocketTransportAddress(InetAddress.getByName(HOST), PORT));
            } catch (Exception ex) {
                ex.printStackTrace();
                System.out.println(ex.getMessage());
        }
    }
    return client;
}
}

 用Java命令向elasticsearch中插入数据

public Map<String,Object> addTopic(KnowledgeTopicDTO knowledgeTopicDTO){
    Map<String,Object> map = new HashMap<>();
 //连接ES
    TransportClient transportClient =  ESClientConnectionUtil.getESClientConnection();
    JSONObject json = JSONObject.fromObject(knowledgeTopicDTO);//后台传过来的对象数据转换成json格式
    try{
        //index 索引名称(相当于数据库) type :类型(相当于数据库中的表)
        IndexResponse response = transportClient.prepareIndex("knowledge", "knowledge_theme").setSource(json, XContentType.JSON).get();
        if(null !=response.getId()){
            map.put("code",200);
            return map;
        }
    }catch (Exception e){
        e.printStackTrace();
        map.put("code",500);
        return map;
    }
    return null;
}

 

使用Java根据id查询数据

public Map<String,Object> addTopic(KnowledgeTopicDTO knowledgeTopicDTO){

 TransportClient transportClient =  ESClientConnectionUtil.getESClientConnection();
//参数:索引名,类型(type) id
GetResponse response = client.prepareGet("knowledge", "knowledge_theme", "1")
        .setOperationThreaded(false)    // 线程安全
        .get();
JSONObject obj = new JSONObject().fromObject(response.getSourceAsString());//将json字符串转换为json对象
InformationDTO information = (InformationDTO) JSONObject.toBean(obj, InformationDTO.class);//将json数据转换成InformationDTO实体对象
String codes =response.getId();//获取_id
}

 

根据id进行修改数据(传入对象)

//knowledgeTopic为修改数据的对象
//修改状态后的对象转换成json数据
JSONObject fromObject= JSONObject.fromObject(knowledgeTopic);
//参数:索引名,类型(type) id(指的是_id) 要修改的json数据:fromObject
UpdateResponse updateResponse = client.prepareUpdate("knowledge", "knowledge_theme", "1")
     .setDoc(fromObject).get();

 

根据id修改数据(针对单个字段修改)

XContentBuilder source = null;

     try {

         source = XContentFactory.jsonBuilder()

                 .startObject()

                 .field("browseNum", num) //browseNum:要修改的字段名,num 修改的值

                 .endObject();

     catch (IOException e) {

         e.printStackTrace();

     }//client:ES连接  codes为文档的_id

     UpdateResponse updateResponse = client.prepareUpdate("article""up_information", codes).setDoc(source).get();

 

ES模糊查询

SearchResponse searchResponse=null;
//连接elasticsearch
TransportClient transportClient =  ESClientConnectionUtil.getESClientConnection();
searchResponse = client.prepareSearch()
                    .setIndices("knowledge")
                    .setTypes("knowledge_theme")
                     .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                    .setScroll(TimeValue.timeValueMinutes(30)) //游标维持时间
                    .setSize(2 * 5)//实际返回的数量为10*index的主分片数
                     .setQuery(QueryBuilders.wildcardQuery("name", ("*"+name+"*").toLowerCase()))  //查询的字段名及值
                    .execute()
                    .actionGet();
### Java集成Elasticsearch教程 #### 项目依赖 为了在Java应用程序中使用Elasticsearch,需引入必要的库文件。通常情况下,在`pom.xml`中添加如下依赖项[^2]: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>{es.version}</version> </dependency> <!-- 如果是Elasticsearch8.x,则应改为 --> <dependency> <groupId>co.elastic.clients</groupId> <artifactId>elasticsearch-java</artifactId> <version>{es.java.api.version}</version> </dependency> ``` #### 创建客户端实例 建立与Elasticsearch集群连接前,先创建RestHighLevelClient对象(对于旧版),或采用新版API中的ElasticsearchClients来初始化。 针对较新的版本(如8.x),可按下面的方式设置客户端[^3]: ```java // 新建弹性搜索客户端配置 final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("elastic", "password")); // 构造 RestClientBuilder 并指定认证信息和其他选项 final RestClientBuilder builder = RestClient.builder( new HttpHost("localhost", 9200)) .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)); // 使用 ElasticSearch 客户端工厂方法获取 client 实例 ElasticsearchClient client = new ElasticsearchClient(builder.build()); ``` #### 数据操作示例 这里给出几个常见的CRUD操作例子,包括索引文档、检索以及删除等动作。 ##### 添加单条记录至特定索引内 ```java IndexRequest request = new IndexRequest("my-index"); request.id("1"); // 设置唯一ID String jsonString = "{" + "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elasticsearch\"" + "}"; request.source(jsonString, XContentType.JSON); client.index(request, RequestOptions.DEFAULT); ``` ##### 查询全部符合条件的结果集 ```java SearchRequest searchRequest = new SearchRequest("my-index"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchAllQuery()); searchRequest.source(sourceBuilder); SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT); for (SearchHit hit : response.getHits()) { System.out.println(hit.getSourceAsString()); } ``` ##### 删除某一条目下的所有数据 ```java DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest("index-name"); deleteByQueryRequest.setConflicts("proceed"); BulkByScrollResponse bulkResponse = client.deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT); long deletedDocsCount = bulkResponse.getDeleted(); System.out.printf("%d documents were successfully removed.\n", deletedDocsCount); ``` 上述代码片段展示了如何利用Java REST High Level Client执行基本的任务;而对于更新后的API风格,请参阅官方指南以获得更详细的指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值