您的当前位置:首页正文

springboot 中如何使用 ingest-attachment

2024-11-24 来源:个人技术集锦

springboot 中如何使用elasticsearch ingest-attachment

我这里 是默认你 springboot 集成了 elasticsearch 的,如果没有 你自己先去完成 集成,这不多说了
默认你已经建好了通道

1.写上传也页面 略;

2 .上代码(这里直白的讲解,不使用任何高级工具类)

application.properties 里有什么略 自己脑部

****没有对公共代码 封装 只为 让大家看明白,是将工具里的代码 罗列到 一起的  可能有些 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
显示全文