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

网站建设方案书编写网站开发与维护项目招标

网站建设方案书编写,网站开发与维护项目招标,推销产品的软文500字,网站备案费用多少目录 为什么要将LAC改造成ES插件? 怎么将LAC改造成ES插件? 确认LAC java接口能work 搭建ES插件开发调试环境 编写插件 生成插件 安装、运行插件 linux版本的动态链接库生成 总结 参考文档 为什么要将LAC改造成ES插件? ES是著名的非…

目录

为什么要将LAC改造成ES插件?

怎么将LAC改造成ES插件?

确认LAC java接口能work

搭建ES插件开发调试环境

编写插件

生成插件

安装、运行插件

linux版本的动态链接库生成

总结

参考文档


为什么要将LAC改造成ES插件?

ES是著名的非关系型文档数据库,开源、近实时、分布式,很多搜索引擎比如github、维基百科等都是以ES为骨架搭建的。我们也想基于ES搭建一套自己的搜索引擎。搜索引擎涉及到大量的自然语言处理(nlp),当前nlp的大量库类,尤其神经网络,基本都是基于python开发的,很少基于其他语言的。然而ES是用java语言开发的,这导致它没能很好的和当前nlp技术融合。但是ES有一个优点:预留了插件接口,这使它保留了扩展能力。一个很自然的想法就是,把python的nlp类库包装成ES插件。

我们调研后发现,常见的ES分词插件比如IK,效果其实一般。LAC是百度研发的一款词法分析工具,分词准确度、运行速度都不错。我们希望把它改造成ES插件。LAC本身python第三方库,官方也提供了c++、java、android语言的调用接口。具体见GitHub - baidu/lac。

根据github上公开的源码,我们发现,LAC的java接口其实是用JNI调c++的动态链接库。它还提供了window环境下编译好的LAC动态链接库以及java调用的demo (https://github.com/baidu/lac/releases/tag/v2.0.0)。这太好了,我们就以windows环境下的ES-LAC插件开发作为切入点。

开发环境说明

windows 10

intellij IDEA  2020.1.2社区版

gradle是intellij IDEA自带的,6.6.1

java 14

elasticsearch 7.10.2版github源码

lac4javawin

(java和IDEA版本是经过千辛万苦试探出来的,建议别瞎改)

怎么将LAC改造成ES插件?

确认LAC java接口能work

解压lac4javawin,同地址下载models_general。把LacMulti.java部分的argv拼写错误修正(或者把这个LacMulti.java删掉)。修改model_path为models_general下的lac路径,必要时将system.loadlibrary修改成system.load(lacjni.dll的绝对路径,不省略后缀),

运行lacDemo.java。能对输入的句子进行分词即为成功。

搭建ES插件开发调试环境

es调试有两种方式:远程调试,本地调试。

远程调试是指:远方服务器上运行es,本地也启动同版本的es,远方和本地建立联系,那么在本地打上的断点,远方可以传回对应的断点内部值,实现了调试。相当于本地负责打断点,远方负责执行。这样做的好处是:本地不需要真的运行程序,对资源要求很低,而远方的程序保持在远方的环境下,是真正生产中的运行状态,不存在迁移环境带来的问题。唯一的要求,需要调试的部分,远程和本地得是一致的,其他地方,比如本地多加载了一个插件,不会影响调试

本地调试是指:直接在本地编译es,运行起来,在localhost:9200可以访问到es,这个编译好的es在本地真的搭起了一个文档数据库。

回到我们开发调试ES的场景:有一个半成品es插件,es可能因为插件的bug而报错终止。那么远程程序运行不起来,本地也不用想着调试了。所以,ES插件的开发调试环境,只能是本地调试。本地调试的步骤如下:

到github上release链接里下载7.10.2版本的ES源码。然后按照Elasticsearch idea本地启动/调试教程-适用不同操作系统_热心小伙chj的博客-CSDN博客里的步骤启动本地调试。注意:run configurations里,VM option里的路径,保持windows下的反斜杠,不用修改。同时,一定要勾选上“include independencies with provided scope”。

编写插件

仿plugins下的analysis-smartcn写。大坑:插件最终是要打成jar包的。jar里的程序如何访问包内的dll呢?路径要怎么写?

生成插件

用gradle pz,将依赖的资源打在jar外。这样可以避免jar内程序访问jar内部资源的路径问题,尤其是访问文件夹!这种还不同于单个文件,可以复制到jar外指定路径再读。

安装、运行插件

本地调试的模式下,将生成插件解压到Elasticsearch idea本地启动/调试教程-适用不同操作系统_热心小伙chj的博客-CSDN博客新建的myhome路径下的plugins文件夹下。

linux版本的动态链接库生成

这是一个大坑!百度的文档(lac/java at master · baidu/lac · GitHub)真是......,编译命令部分可以参考,资源链接部分就别管了。

1,下载paddle inference的库,版本是cpu_avx_mkl,链接是https://paddle-inference-lib.bj.bcebos.com/1.8.4-cpu-avx-mkl/fluid_inference.tgz

2,下载lac 2.1.0版源码(lac/java at v2.1.0 · baidu/lac · GitHub)

3,环境:redhat 7.4 + java 1.8 + gcc 5.5.0 + cmake 3.24.3 + binutils 2.26.2

4,把下载好的models_general,编译出来的代码和lib通通拷贝到windows下,用gradle打成jar包,然后把jar包拷贝到linux下运行。

总结

要本地调试,不要远程调试;

要模仿es源码编译中gradle引入的analysis插件,不要模仿在github上找的ik插件(这可是maven格式的,和es 7.10.2不兼容);

要把资源打在jar外,不要打在jar内;

参考文档

Linux下源码编译安装cmake、升级安装gcc-CSDN博客

http://www.yayakq.cn/news/785329/

相关文章:

  • 汽配网站源码小说在线阅读网站怎么做
  • vue可以做网站吗阿里云 拦截网站
  • 宣城网站建设公司东莞建设银行各网点营业时间查询
  • 阿里巴巴国际站新手入门教程新乡网站建设哪家公司好
  • 佛山市手机网站建设企业专做水果的网站
  • 网站设计与规划论文网站建设设计基础
  • 做一个网站的完整教程电商平台搭建方案
  • 文化公司网站源码快速开发安卓app软件
  • 青海网站建设 小程序开发企业工商注册查询
  • 深圳设计网站接做网站需要问什么
  • 家纺营销型网站做网站必须要电脑吗
  • 电商网站设计主题响应式网站好不好
  • 海南住房建设厅定额网站取名字网站如何做
  • 哈尔滨发布信息的网站公司网站怎么做美观
  • 茶叶网站制作模板win2008的iis7建网站流程
  • 第二章营销型网站建设测验做网站人
  • 网站推广建设手机网站轮播图
  • 目前比较新的网站建设技术什么网站收录排名最高
  • 英德市住房城乡建设局网站做网站商城项目的流程
  • 多域名指向同一网站光纤网络是哪个公司的
  • 如何建设网站盈利珠海建网站设计
  • 湖北省和建设厅网站建设厅投诉网站首页
  • 专业网站建设新闻小区推广最有效的方式
  • 返利网站开发文档HTML转WordPress主题
  • 内部购物券网站怎么做重庆电子工程职业学院招生信息网
  • 大连哪家做网站比较好长春网站建设网诚传媒
  • 上海青浦做网站做数据统计的网站
  • 金融网站建设报价方案做地方门户网站的排名
  • 郑州响应式建站seo搜索培训
  • 500元建站开发公司不建二次加压泵房