我这里 是默认你 springboot 集成了 elasticsearch 的,如果没有 你自己先去完成 集成,这不多说了
默认你已经建好了通道
****没有对公共代码 封装 只为 让大家看明白,是将工具里的代码 罗列到 一起的 可能有些 bug, 大家凑合看 哈****
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
// 通过注解将配置文件中的 index (相当于关系型数据库的 库)值 注入进来,
@Value("${es.index}")
private String index;
// 通过注解将将配置文件中的 type (相当于关系型数据库的表)值 注入进来
@Value("${es.type}")
private String type;
// 通过注解将将配置文件中的 attachment(我们安装完 ingest-attachment 后 手动创建的 pipeline)值 注入进来,
//这里是通道的名称,我叫做了attachment
@Value("${es.attachment}")
private String attachment;
// 通过注解将将配置文件中的 cluster_name(集群名称)值 注入进来
@Value("${es.cluster_name}")
private String cluster_name;
// 通过注解将 ip 值 注入进来
@Value("${es.ip}")
private String ip;
// 通过注解将 端口 值 注入进来
@Value("${es.port}")
private String ip;
@Autowired
private TransportClient transportClient;
//file 这个参数就是用来接受 word文档的
@PostMapping("addWord")
public ModelAndView addEmp( @RequestParam("file") MultipartFile file){
ModelAndView m =new ModelAndView();
//将word 转成 base64 的编码 记得删除空格 和换行 只保留有效数据
String encode = base64Encoder.encode(file.getBytes()).replaceAll("\r|\n", "");
XContentBuilder xContentBuilder=null;
String name="";
if(null!=file){
//获取文件的文字
name=file.getOriginalFilename();
}
try {
//构建通道里的数据 这里是将通道里加入数据, 让ingest-attachment 帮我们抽取文本,
//注意我们没有手动抽取文本 是插件版我们做的,这里我默认你已经构建了通道(我使用kibana构建的)
xContentBuilder = XContentFactory.jsonBuilder().startObject()
.field("name", name)
.field("data", encode ).endObject();
}catch (Exception e){
e.printStackTrace();
}
// 配置elasticsearch 集群的 settings
Settings settings = Settings.builder()
.put("cluster.name", cluster_name) //连接的集群名
.put("client.transport.ignore_cluster_name", true) //如果集群名不对,也能连接
.build();
// 根据 ip port 构建 客户端
transportClient = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName(ip),Integer.valueOf(port)));
// 使用客户端设置 将 通道值 通过 哪个 通道(attachment[其实就是pipeline]) 抽取文本存入 哪个index 的 哪个 type中
// 这里执行使用的是 get()
transportClient.prepareIndex(index,type).setPipeline(attachment)
.setSource(xContentBuilder).get();
m.setViewName("success");
return m;
}
// 使用kibana 查看 查index 里所有的数据 或者 模糊匹配 抽取到的文本里的内容,其实已经完成了 对word文本 存入 es