提问要多花一点心思哦

请问一个在查询的同时分组聚合的问题

rochy 回复了问题 • 3 人关注 • 1 个回复 • 1320 次浏览 • 2019-01-24 09:30 • 来自相关话题

reindex怎么使用啊

JackGe 回复了问题 • 5 人关注 • 3 个回复 • 2724 次浏览 • 2019-01-23 17:41 • 来自相关话题

核心词识别后在ES DSL中的使用方法推荐

回复

core_wzw 发起了问题 • 1 人关注 • 0 个回复 • 1888 次浏览 • 2019-01-23 16:16 • 来自相关话题

es-scroll迭代问题

puyunjiafly 回复了问题 • 5 人关注 • 3 个回复 • 4585 次浏览 • 2019-01-23 15:37 • 来自相关话题

data目录下的存储问题

fanmo3yuan 回复了问题 • 3 人关注 • 2 个回复 • 3405 次浏览 • 2019-01-23 15:25 • 来自相关话题

慢日志全局级别设定

fanmo3yuan 回复了问题 • 4 人关注 • 5 个回复 • 2910 次浏览 • 2019-01-23 15:22 • 来自相关话题

es 分片均匀,但只有其中一个节点负载特别高,bulk也堆积非常多

puyunjiafly 回复了问题 • 14 人关注 • 8 个回复 • 5637 次浏览 • 2019-01-23 15:07 • 来自相关话题

efk elasticsearch 怎么修改timestamp时区

zqc0512 回复了问题 • 3 人关注 • 3 个回复 • 2163 次浏览 • 2019-01-23 14:46 • 来自相关话题

使用Java API访问ES时,ES需要用户名密码,那么Java的代码怎么写?

rochy 回复了问题 • 2 人关注 • 1 个回复 • 8358 次浏览 • 2019-01-23 14:03 • 来自相关话题

es握手失败

rochy 回复了问题 • 2 人关注 • 2 个回复 • 4702 次浏览 • 2019-01-23 11:06 • 来自相关话题

自研基于StanfordNLP的ES分词插件

God_lockin 发表了文章 • 9 个评论 • 7365 次浏览 • 2019-01-22 19:32 • 来自相关话题

为ES构建Stanford NLP分词插件


Stanford NLP?


Stanford分词器是斯坦福大学NLP团队维护的一个开源分词器,支持了包括中文、英文…的语言,而且除了分词之外,它还支持了包括词性分析、情感分析…的各种功能。\
这俩是这个project的项目主页

  • [Home page](https://stanfordnlp.github.io/CoreNLP/index.html)
  • [GitHub page](https://github.com/stanfordnlp/CoreNLP)

    Why Stanford core NLP?

     
    市面上确实会有很多很有名的开源分词器,比如IK、Jieba,还有一些其他团队和公司提供的开源/商用的分词器,他们各有优劣。但是在各种分词器上比较了一大堆的分词case之后,我们发现Stanford NLP似乎是最适合我们当前需求的一个,因为我们不仅仅需要分词,还需要一些包括情感分析之类在内的更多的一些功能。

    我们公司是做金融数据的搜索推荐的,在对比了各家分词器之后我们老板觉得Stanford NLP的效果最好,但是作为算法出身的人,他实现了一套非常重的分词、排序、搜索的服务。

    在对比如研报、财报之类的信息进行搜索的时候确实会比较有效,但是在对经济类的新闻进行搜索的时候就会显得十分的笨重。

    基于这个背景,我开始试图在ES里面引入老板推崇的Stanford 分词器来适应他的搜索、分词的需要,同时也能够不通过他那个笨重的分词排序服务来对我们系统中大量的经济、金融类的新闻进行分词、索引,并提供和他自己分词效果类似的分词和检索服务。

    Why this project


    我在包括百度、某谷姓404网站、GitHub以及国内的中文社区([Elastic中文社区](https://elasticsearch.cn/))在内的各种地方搜过也问过了,但是似乎没有一个直接开箱可用的分词插件。所以,我只剩一条路了,就是搭建一个自己的插件来引用这个分词器。

    How


    对ES来说,插件主要分为两个部分:

    1. 让ES可以看到的部分(class extends Plugin)
    2. 自己行使职能的部分(functional part)

      plugin


    3. 为了让ES可以加载我们的plugin,我们需要先继承Plugin类,然后我们这个是个分词器插件,所以还要实现AnalysisPlugin类
    4. 看过ES源码或者其他分词器源码的同学应该会知道,分词器插件需要实现两个方法,一个用来提供tokenizer,一个是analyzer分别对应分词器中的这俩。
      • 重写Map<String, AnalysisModule.AnalysisProvider<TokenizerFactory>>是为了可以提供搜索用分词器
      • 重写Map<String, AnalysisModule.AnalysisProvider<AnalyzerProvider<? extends Analyzer>>>是为了可以提供索引用分词器
    5. 在这个分词器里面我们主要是依靠Tokenizer来实现分词的

      functional class


      分词器,特别是Tokenizer主要是靠重写三个方法来实现分词的

    6. incrementToken:用来确定每一个词元,输出每一个单词(字)以及它的位置、长度等
    7. reset:用来重制分词结果
    8. end:用来告诉ES,这段文本的分词已经结束了

      所以我们主要需要重写的就是这仨方法,当然了,为了能让分词器正确的使用,我们还需要添加一些分词器的配置和初始化的内容,具体代码不写了可以参考我的git,主要讲两个坑:
    9. ES是通过配置文件里的路径来寻找对应的插件类
    10. 然后通过配置文件里的key和刚才提到的代码里的key来寻找对应的分词器,所以这俩地方不要写错了
      #plugin-descriptor.properties: classname=org.elasticsearch.plugin.analysis.AnalysisSDPlugin
      #plugin-descriptor.properties: name=stanford-core-nlp
    11. 在开发过程中由于有java-security的存在,所以需要通过AccessController来调用和加载我们需要的外部jar包

      odds and ends


    12. Stanford分词器里面包含了很多功能,目前我使用了分词的部分
    13. 分词器自带词典文件,不过如果要做词典的修改可能需要解包,修改,再重新打包
    14. 我现在hardcode了一大堆的标点符号在里面,后面可能会去优化一下部分逻辑
    15. 待完成的功能还有其他功能包括情感分析之类的

      also see

      [GitHub 地址](https://github.com/godlockin/esStanfordNLPAnalyzer)

ES有那种web端就可以部署的程序吗

rochy 回复了问题 • 2 人关注 • 1 个回复 • 1057 次浏览 • 2019-01-22 17:13 • 来自相关话题

elasticsearch 数据迁移 源集群不停止写服务

rochy 回复了问题 • 3 人关注 • 1 个回复 • 2085 次浏览 • 2019-01-22 17:06 • 来自相关话题

es5.5查询的时候,有一个字段是厂商,有中兴,华为,诺基亚,爱立信,怎么用term搜索所有的厂商?

rochy 回复了问题 • 3 人关注 • 2 个回复 • 1304 次浏览 • 2019-01-22 17:02 • 来自相关话题

加入同义词全文检索查询以后,性能明显下降,请问怎么回事呢?

liubin 回复了问题 • 6 人关注 • 3 个回复 • 2413 次浏览 • 2019-01-22 11:44 • 来自相关话题