美文网首页
elasticsearch词法分析器

elasticsearch词法分析器

作者: 温岭夹糕 | 来源:发表于2021-03-03 00:32 被阅读0次

基本语法

POST _analyze
{
  "analyzer": "分析器",
  "text": "文档"
}

词法分析器的构成

文档:组成
词法分析器由3部分组成,分别是
1.Character filters
针对原始文本进行处理,比如过滤html标签
2.Tokenizer
按照一定的规则切分单词
3.Token filter
将切分后的单词进行加工,比如转为小写

所以基本语法还可以是这种形式

post _analyze
{
"char_filter":[],
"tokenizer":"",
"filter":[]
}

实验一:使用内置标准词法分析进行分析(官网demo)

POST _analyze
{
  "analyzer": "standard",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}
//结果为
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]

但是像the,a这些停用词不是我们想要的结果,应该过滤掉,这个时候就可以利用分析器的配置进行二次修改,

实验二:根据个人需求自定义一个词法分析器
方案一:利用配置

put my_index
{
 "settings":{
   "analysis":{
     "analyzer":{
       "my_analyer":{
         "type":"standard",    //指定词法分析器
         "max_token_length":"3", //设置单个最长为3个单词
         "stopwords":["a","the"]  //设置停用词,可以是数组,也可以是文件
       }
     }
   }
 } 
}

方案二:利用Token filter

put my_index
{
 "settings":{
   "analysis":{
     "filter":{   //自定义 stop tokenfilter 
       "my_stop":{
         "type" :"stop",
         "stopwords":["a","the","and"]  //设置停用词
       }
     },
     "analyzer":{
       "my_analyer":{
         "tokenizer":"standard",  //指定tokenizer,与上面不同
         "filter":[  //当为数组时,需要注意顺序
           "lowercase" , //转为小写,注意执行顺序,因为上面的停用词都是小写
             "my_stop"   //停用词过滤
          ]
       }
     }
   }
 } 
}

当我们的语句由html文档时,需要借助Character filters来重新自定义词法分析器(内置的满足不了需求)
这里使用 html_strip Character filter

put my_index
{
 "settings":{
   "analysis":{
     "filter":{
       "my_stop":{
         "type" :"stop",
         "stopwords":["a","the","and"]
       }
     },
     "analyzer":{
       "my_analyer":{
         "filter":[
           "lowercase",
             "my_stop"
          ],
         "char_filter":["html_strip"],
         "tokenizer":"standard"
       }
     }
   }
 } 
}

POST my_index/_analyze
{
  "analyzer": "my_analyer",
  "text": "The a  2 <br>QUICK</br> Brown-Foxes jumped over the lazy dog's bone."
}
//可以观察到结果里的quick被正确的提取出来

至此,已有对词法分析的初步认知,更深入还得看文档

中文分词

因为像内置的分词器基本都是靠空白进行划分/切割单词
中文是连续的或者标点符号进行语句的划分,因此需要中文分词器

IK中文分词器

地址:https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v7.5.0

进入docker容器安装,因为我的es版本是7.4的所以我选择7.4版本的

/usr/share/elasticsearch/bin/elasticsearch install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-7.4.0.zip

注意版本不匹配会报错

OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.

当plugin目录下出现ik文件夹就意味着在线安装成功

post _analyze
{
  "analyzer":"ik_max_word",
  "text":"他说的在理"
}

如何切分数字?

实际上数字会被当成一个整体(相当于keyword),也可以理解为因为没有空格默认的分词器将它切割为一个单元

post _analyze
{
  "analyzer":"standard",
  "text":"1234"
}

{
  "tokens" : [
    {
      "token" : "1234",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "<NUM>",
      "position" : 0
    }
  ]
}

相关文章

  • elasticsearch词法分析器

    基本语法 词法分析器的构成 文档:组成[https://www.elastic.co/guide/en/elast...

  • 一个编译器最简前端的python实现

    一个编译器的前端通常包括词法分析器和语法分析器。在分析过程中,文本输入词法分析器,根据词法规则解析出词法单元。词法...

  • PHP核心理解-flex和bison入门

    一般词法分析器和语法分析器会一起使用,语法分析器会调用词法分析器来读取输入,词法分析器匹配到特定的模式后,就向语法...

  • 三. Flex进阶:需要了解的一些知识

    参考:词法分析器生成工具flex词法分析器总结--flex&bison词法分析生成器flex的选项 1. Flex...

  • 自己动手制作C 语言编译器(3):词法分析器

    本章我们要讲解如何构建词法分析器。 什么是词法分析器 简而言之,词法分析器用于对源码字符串做预处理,以减少语法分析...

  • 龙书 第三章

    词法单元:词法分析器扫描源程序并输出一个由词法单元组成的序列。这些词法单元通常会逐个传送给语法分析器。有些词法单元...

  • 编译原理->词法分析

    词法分析器的作用 词法分析器的主要任务是读入源程序的输入字符、将它们组成词素,生成并输出一个词法单元序列,每个词法...

  • 词法分析

    词法分析 词法分析器:字符流->记号流 词法分析器的手工构造比较符号的转移图转移图.png标识符的转移图转移图标识...

  • 语法分析器 Parser

    词法分析器-->output: 记号 --> 语法分析器 -->output: AST 抽象语法树 context...

  • 编译原理(一) Lexical analysis

    词法分析器的作用 词素(Lexeme)词法单元(Token): Token-name + Attribute-va...

网友评论

      本文标题:elasticsearch词法分析器

      本文链接:https://www.haomeiwen.com/subject/fjmsrktx.html