当前位置: 首页 > news >正文

自然语言处理系列四十七》Elasticsearch搜索引擎》Elasticsearch代码实战

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】

文章目录

  • 自然语言处理系列四十七
    • Elasticsearch搜索引擎》Elasticsearch代码实战
      • Word2vec词向量模型算法原理
  • 总结

自然语言处理系列四十七

Elasticsearch搜索引擎》Elasticsearch代码实战

上一篇文章详细Elasticsearch安装部署和使用,本篇文章将给一个Java调用Elasticsearch代码实战例子。

6. Elasticsearch的Java调用例子
首先添加最新或者你需要的版本Maven依赖如下,替换到x.x.x版本部分。

org.elasticsearch
elasticsearch
x.x.x


org.elasticsearch.client
transport
x.x.x

实现关键词进行相关度搜索的Java代码例子如12.1所示。
【代码12.1】 ESDemo.java

package com.chongdianleme.job;
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.*;
/*** Created by 充电了么App - 陈敬雷* 充电了么App官网:http://chongdianleme.com/* 充电了么App - 专注上班族职业技能提升充电学习的在线教育平台* Elasticsearch的Java代码调用演示*/
public class ESDemo {private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public static Client client = null;//获取客户端访问连接public static  Client getClient() {if(client!=null){return client;}Settings settings = Settings.builder().put("cluster.name", "chongdianleme-elasticsearch-application").build();try {client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("172.172.0.11"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("172.172.0.12"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("172.172.0.13"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("172.172.0.14"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("172.172.0.15"), 9300));} catch (UnknownHostException e) {e.printStackTrace();}return client;}/*** 添加搜索文档索引*/public static String addIndex(String index,String type,Doc Doc){HashMap<String, Object> hashMap = new HashMap<String, Object>();hashMap.put("kcID", Doc.getKcID());hashMap.put("title", Doc.getTitle());hashMap.put("insertTime", Doc.getInsertTime());IndexResponse response = getClient().prepareIndex(index, type).setSource(hashMap).execute().actionGet();return response.getId();}/*** 按关键词key进行课程标题的相关度搜索及高亮显示* @return*/public static Map<String, Object> search(String key,String index,String type,int start,int row){SearchRequestBuilder builder = getClient().prepareSearch(index);builder.setTypes(type);builder.setFrom(start);builder.setSize(row);//设置高亮字段名称builder.highlighter(new HighlightBuilder().field("userId"));builder.highlighter(new HighlightBuilder().field("key"));//设置高亮前缀builder.highlighter(new HighlightBuilder().preTags("<font color='red'>"));//设置高亮后缀builder.highlighter(new HighlightBuilder().postTags("</font>"));builder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);if(StringUtils.isNotBlank(key)){builder.setQuery(QueryBuilders.multiMatchQuery(key, "userId","key"));}builder.setExplain(true);SearchResponse searchResponse = builder.get();SearchHits hits = searchResponse.getHits();long total = hits.getTotalHits();Map<String, Object> map = new HashMap<String,Object>();SearchHit[] hits2 = hits.getHits();map.put("count", total);List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();for (SearchHit searchHit : hits2) {Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();HighlightField highlightField = highlightFields.get("userId");Map<String, Object> source = searchHit.getSource();if(highlightField!=null){Text[] fragments = highlightField.fragments();String name = "";for (Text text : fragments) {name+=text;}source.put("userId", name);}HighlightField highlightField2 = highlightFields.get("key");if(highlightField2!=null){Text[] fragments = highlightField2.fragments();String describe = "";for (Text text : fragments) {describe+=text;}source.put("key", key);}list.add(source);}map.put("dataList", list);return map;}public static void main(String[] args) {String insertTime = simpleDateFormat.format(new Date());Doc doc=new Doc("1","充电了么",insertTime);addIndex("test","tk",doc);Map<String, Object> search = ESDemo.search("充电了么", "test", "tk", 0, 36);List<Map<String, Object>> list = (List<Map<String, Object>>) search.get("dataList");}
}
class Doc {private String kcID;//课程IDprivate String title;//课程标题private String insertTime;//课程发布时间public Doc(String kcID, String title, String insertTime) {this.kcID = kcID;this.title = title;this.insertTime = insertTime;}public String getKcID() {return kcID;}public void setKcID(String kcID) {this.kcID = kcID;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getInsertTime() {return insertTime;}public void setInsertTime(String insertTime) {this.insertTime = insertTime;}
}

Word2vec词向量模型算法原理

下一篇文章详解Word2vec词向量模型算法原理,敬请关注。
更多的技术交流和探讨也欢迎加我个人微信chenjinglei66。

总结

此文章有对应的配套新书教材和视频:

【配套新书教材】
《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:本书从自然语言处理基础开始,逐步深入各种NLP热点前沿技术,使用了Java和Python两门语言精心编排了大量代码实例,契合公司实际工作场景技能,侧重实战。
全书共分为19章,详细讲解中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注、文本相似度算法、语义相似度计算、词频-逆文档频率(TF-IDF)、条件随机场、新词发现与短语提取、搜索引擎Solr Cloud和Elasticsearch、Word2vec词向量模型、文本分类、文本聚类、关键词提取和文本摘要、自然语言模型(Language Model)、分布式深度学习实战等内容,同时配套完整实战项目,例如对话机器人实战、搜索引擎项目实战、推荐算法系统实战。
本书理论联系实践,深入浅出,知识点全面,通过阅读本书,读者不仅可以理解自然语言处理的知识,还能通过实战项目案例更好地将理论融入实际工作中。
《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。

【配套视频】

推荐系统/智能问答/人脸识别实战 视频教程【陈敬雷】
视频特色:把目前互联网热门、前沿的项目实战汇聚一堂,通过真实的项目实战课程,让你快速成为算法总监、架构师、技术负责人!包含了推荐系统、智能问答、人脸识别等前沿的精品课程,下面分别介绍各个实战项目:
1、推荐算法系统实战
听完此课,可以实现一个完整的推荐系统!下面我们就从推荐系统的整体架构以及各个子系统的实现给大家深度解密来自一线大型互联网公司重量级的实战产品项目!
2、智能问答/对话机器人实战
由浅入深的给大家详细讲解对话机器人项目的原理以及代码实现、并在公司服务器上演示如何实际操作和部署的全过程!
3、人脸识别实战
从人脸识别原理、人脸识别应用场景、人脸检测与对齐、人脸识别比对、人脸年龄识别、人脸性别识别几个方向,从理论到源码实战、再到服务器操作给大家深度讲解!

自然语言处理NLP原理与实战 视频教程【陈敬雷】
视频特色:《自然语言处理NLP原理与实战》包含了互联网公司前沿的热门算法的核心原理,以及源码级别的应用操作实战,直接讲解自然语言处理的核心精髓部分,自然语言处理从业者或者转行自然语言处理者必听视频!

人工智能《分布式机器学习实战》 视频教程【陈敬雷】
视频特色:视频核心内容有互联网公司大数据和人工智能、大数据算法系统架构、大数据基础、Python编程、Java编程、Scala编程、Docker容器、Mahout分布式机器学习平台、Spark分布式机器学习平台、分布式深度学习框架和神经网络算法、自然语言处理算法、工业级完整系统实战(推荐算法系统实战、人脸识别实战、对话机器人实战)。

上一篇:自然语言处理系列四十六》Elasticsearch搜索引擎》Elasticsearch安装部署和使用
下一篇:自然语言处理系列四十八》Word2vec词向量模型》算法原理

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 川崎机器人维修请开启马达电源报警故障
  • 使用Lora微调LLM——笔记
  • okhttp异步请求连接阻塞问题排查
  • cenos 7 安装 golang
  • vue3 自定义hooks(组合式函数)
  • PHP语言有哪些优势和特点?
  • C——四种排序方法
  • 84、 k8s的pod基础+https-harbor
  • 行级安全的艺术:SQL中的精细化数据保护策略
  • C++中类的相关学习
  • Golang 教程2
  • NoSql数据库 Redis集群详解
  • 如何使用 Pytest 进行测试
  • 【AI绘画】Midjourney前置指令/describe、/shorten详解
  • 给自己复盘用的tjxt笔记day12第一部分
  • ----------
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • @angular/forms 源码解析之双向绑定
  • 【刷算法】求1+2+3+...+n
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ES6之路之模块详解
  • Facebook AccountKit 接入的坑点
  • JavaScript HTML DOM
  • JavaScript服务器推送技术之 WebSocket
  • Java到底能干嘛?
  • mysql 5.6 原生Online DDL解析
  • Node项目之评分系统(二)- 数据库设计
  • React as a UI Runtime(五、列表)
  • select2 取值 遍历 设置默认值
  • SQL 难点解决:记录的引用
  • sublime配置文件
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 成为一名优秀的Developer的书单
  • 高程读书笔记 第六章 面向对象程序设计
  • 机器学习 vs. 深度学习
  • 基于组件的设计工作流与界面抽象
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 日剧·日综资源集合(建议收藏)
  • 使用 QuickBI 搭建酷炫可视化分析
  • 数据结构java版之冒泡排序及优化
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • # 计算机视觉入门
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (SpringBoot)第二章:Spring创建和使用
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二十三)Flask之高频面试点
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)计算机毕业设计大学生兼职系统
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十一)手动添加用户和文件的特殊权限
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行