allbetgmaing客户端下载:Elasticsearch从入门到放弃:分词器初印象

admin 4个月前 (06-30) 科技 46 0

Elasticsearch 系列回来了,先给由于这个系列关注我的同学说声负疚,拖了这么久才回来,这个系列虽然叫「Elasticsearch 从入门到放弃」,但只有三篇就放弃照样有点太过的,以是照样回来继续更新。

之前我们聊过了 Elasticsearch 的索引和文档,不太熟悉的话可以先翻阅一下前文。今天再一起聊一下 Elasticsearch 的分词器。

关于分词

若是你是讲 Elasticsearch 作为搜索引擎,那么你应该需要对分词举行领会,Elasticsearch 的分词是将全文本转换为一系列单词,这样有助于在搜索时获得相关的效果以及相关性剖析。例如我们有一个文本为“I love Elasticsearch”,然后 Elasticsearch 可以将其分解为三个单词,这时我们无论搜索哪个单词,都能搜到这个文本。

Elasticsearch 通太过词器对文本举行分词处置,Elasticsearch 的分词器是由 Character Filters、Tokenizer 和Token Filter 三部门组成。在先容它们之前,我们先来简朴领会一下 Analyze API,它可以辅助我们快速测试一个 Analyzer 的作用,它的用法也异常简朴:

GET /_analyze
{
  "analyzer" : "standard",
  "text" : "Quick Brown Foxes!"
}

其中,analyzer 是指定的分词器,text 是被测试的文本,这样就能获得这个文本分词后的效果。

这是最简朴的一种用法,此外,我们还可以在 path 中指定 index,用于测试指定索引中 mapping 设置的 analyzer 或者索引默认的 analyzer。固然,你也可以测试一下自界说的 analyzer,只需要在参数中设置好 Character Filters、Tokenizer 和Token Filter 即可。关于 Analyze API 更多的使用方法可以自行查阅官方文档 Analyze API

内置 Analyzer

为了方便使用,Elasticsearch 为我们提供了几种内置 Analyzer:

  • Fingerprint:它可以将文本处置为小写的、去除扩展的、有序的、唯一的单词
  • Keyword:不分词
  • Language:提供了30多种常见语言的分词器
  • Pattern:使用正则表达式分词,默认\W+(非字符分开)
  • Simple:凭据非字母切分,小写处置
  • Standard:默认分词器,会基于 Unicode 文本语法,凭据单词划分,并举行小写处置
  • Stop:小写处置,过滤停用词(the, a, is)
  • Whitespace:凭据空格切分,不转小写

现在我们来测试一下 Whitespace Analyzer

GET _analyze
{
  "analyzer": "whitespace",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

它的执行效果是

{
  "tokens" : [
    {
      "token" : "The",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "2",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "QUICK",
      "start_offset" : 6,
      "end_offset" : 11,
      "type" : "word",
      "position" : 2
    },
    {
      "token" : "Brown-Foxes",
      "start_offset" : 12,
      "end_offset" : 23,
      "type" : "word",
      "position" : 3
    },
    {
      "token" : "jumped",
      "start_offset" : 24,
      "end_offset" : 30,
      "type" : "word",
      "position" : 4
    },
    {
      "token" : "over",
      "start_offset" : 31,
      "end_offset" : 35,
      "type" : "word",
      "position" : 5
    },
    {
      "token" : "the",
      "start_offset" : 36,
      "end_offset" : 39,
      "type" : "word",
      "position" : 6
    },
    {
      "token" : "lazy",
      "start_offset" : 40,
      "end_offset" : 44,
      "type" : "word",
      "position" : 7
    },
    {
      "token" : "dog's",
      "start_offset" : 45,
      "end_offset" : 50,
      "type" : "word",
      "position" : 8
    },
    {
      "token" : "bone.",
      "start_offset" : 51,
      "end_offset" : 56,
      "type" : "word",
      "position" : 9
    }
  ]
}

若是有兴趣,可以自行测试一下其他的内置 Analyzer。除了内置的 Analyzer 之外,你也可以凭据需要自界说分词器。

下面我们来看怎么界说我们需要的 Analyzer。

前面提到 Analyzer 由三部门组成,其中 Character Filters 用于对原始文本举行处置(例如去掉html标签),Tokenizer 是凭据指定规则举行切分,Token Filter 卖力将切分的单词举行加工(例如转小写)。

Character Filters

Character Filters 是分词的第一步,Elasticsearch 用它来对原始文本举行一些处置。内置的 Character Filters 有三个,分别是:

  • HTML strip:使用解码值替换HTML标签
  • Mapping:使用指定的替换项替换指定的字符串
  • Pattern replace:使用指定的替换项替换正则匹配的字符串

HTML strip 默认会替换文本中所有的 HTML 标签,你也可以通过设置escaped_tags,将一些特定的标签清扫

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "keyword",
          "char_filter": [
            "my_custom_html_strip_char_filter"
          ]
        }
      },
      "char_filter": {
        "my_custom_html_strip_char_filter": {
          "type": "html_strip",
          "escaped_tags": [
            "b"
          ]
        }
      }
    }
  }
}

这个自界说 Analyzer 就不会替换标签 b。

Tokenizer

在对原始文本举行开端的处置之后,Tokenizer 就要上场了,它辅助我们凭据指定的规则举行分词,Elasticsearch 同样提供了一些内置的 Tokenizer。

  • Character group:凭据设置的字符组举行切分
  • Classic:针对英语语法举行分词
  • Edge n-gram:从单词的起始字符最先按长度依次切分quick 会被分为[q, qu, qui, quic, quick]
  • Keyword:不切分
  • Letter:遇到非字母的字符举行切分
  • Lowercase:与类似 Letter 类似,不外它会把切分后的单词转为小写
  • N-gram:把单词切分为指定长度的字符串聚集,quick 会被分为[qu, ui, ic, ck]
  • Path hierarchy:对路径举行切分,/foo/bar/baz 会分为[/foo, /foo/bar, /foo/bar/baz]
  • Pattern:凭据正则匹配举行切分
  • Simple pattern:正则会受到一些限制,但不支持凭据匹配到的支解符切分
  • Simple pattern split:是支持凭据匹配到的支解符切分的Simple pattern
  • Standard:凭据单词举行切分
  • Thai:针对泰语举行切分
  • UAX URL email:与 Standard 相似,但它会把 url 或邮箱看成一个整体
  • Whitespace:凭据空格举行切分

在这里你可以先对这些内置的 Tokenizer 有个开端的领会,知道它们醒目什么,在详细使用的时刻可以查阅官方文档举行更详细的领会,许多 Tokenizer 还支持一些参数设置,这些到现实场景中天真使用就好。

Token Filter

Elasticsearch 内置的 Token Filter 异常多,这里列几个常用的吧:

  • Trim:删除前后空格
  • Uppercase:转大写
  • Lowercase:转小写
  • Stop:停用词过滤
  • ……

Elasticsearch 中内置的这些分词器及组件可以知足我们一样平常的大部门需求了,能够做到天真应用就很厉害了。若是真的遇到解决不了的问题,你也可以实验自界说分词器,例如对我们的中文举行分词。

中文分词

中文分词的难点在于,它不像英文那样有自然的空格可以举行切分,我们也不能简朴的把它分成一个个的字,而是要分成有意义的词。

对照不错的中文分词器有 ICU Analyzer、IK 和 THULAC

ICU Analyzer

ICU Analyzer 并不是 Elasticsearch 内置的分词器,以是我们需要预先安装插件才气使用

执行下令

elasticsearch-plugin install analysis-icu

举行安装,安装好以后可以使用下令elasticsearch-plugin list举行查看。

安装好之后就可以运行下面这个例子

GET _analyze
{
  "analyzer": "standard", 
  "text": "以为悦目就点赞"
}

GET _analyze
{
  "analyzer": "icu_analyzer", 
  "text": "以为悦目就点赞"
}

你会发现 standard analyzer 就是把这句话拆成一个个字,而 icu analyzer 基本会凭据语义举行拆分。

总结

经由本文的先容,相信你对 Elasticsearch 的分词器也有了一个开端的熟悉,知道它由什么组成,能够使用 Analyze API 对一个分词器举行简朴的测试,也基本能够自界说一些分词器了。

我对内置的 Token Filter 先容的对照少,你可以连系官方文档,对你感兴趣的 Token Filter 举行更深入的研究,若是有什么问题也迎接和我讨论。

,

AllbetGmaing客户端下载

欢迎进入AllbetGmaing客户端下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

Allbet声明:该文看法仅代表作者自己,与本平台无关。转载请注明:allbetgmaing客户端下载:Elasticsearch从入门到放弃:分词器初印象

网友评论

  • (*)

最新评论

文章归档

站点信息

  • 文章总数:439
  • 页面总数:0
  • 分类总数:8
  • 标签总数:900
  • 评论总数:123
  • 浏览总数:3178