前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第09篇-在Elasticsearch中构建自定义分析器

第09篇-在Elasticsearch中构建自定义分析器

原创
作者头像
普通人刘大
修改2020-07-02 14:42:28
2.2K0
修改2020-07-02 14:42:28
举报

我的Elasticsearch系列文章,逐渐更新中,欢迎关注

0A.关于Elasticsearch及实例应用

00.Solr与ElasticSearch对比

01.ElasticSearch能做什么?

02.Elastic Stack功能介绍

03.如何安装与设置Elasticsearch API

04.如果通过elasticsearch的head插件建立索引_CRUD操作

05.Elasticsearch多个实例和head plugin使用介绍

06.当Elasticsearch进行文档索引时,它是怎样工作的?

07.Elasticsearch中的映射方式—简洁版教程

08.Elasticsearch中的分析和分析器应用

09.在Elasticsearch中构建自定义分析器

10.Kibana科普-作为Elasticsearhc开发工具

11.Elasticsearch查询方法

12.Elasticsearch全文查询

13.Elasticsearch查询-术语级查询

14.Python中的Elasticsearch入门

15.使用Django进行ElasticSearch的简单方法

16.关于Elasticsearch的6件不太明显的事情

17.使用Python的初学者Elasticsearch教程

18.用ElasticSearch索引MongoDB,一个简单的自动完成索引项目

19.Kibana对Elasticsearch的实用介绍

20.不和谐如何索引数十亿条消息

21.使用Django进行ElasticSearch的简单方法

另外Elasticsearch入门,我强烈推荐ElasticSearch新手搭建手册和这篇优秀的REST API设计指南 给你,这两个指南都是非常想尽的入门手册。

介绍

在此阶段的上一篇博客中,我已经解释了有关常规分析器结构和组件的更多信息。我也解释了每个组件的功能。在此博客中,我们将通过构建自定义分析器,然后查询并查看差异来了解实现方面。

定制分析仪

因此,让我们考虑定制分析仪的情况。假设我们输入到Elasticsearch的文本包含以下内容

1. html标签

html标签在索引时可能会出现在我们的文本中,其实这在大多数情况下是不需要的。所以我们需要删除这些。

2.停止词

像the,and,or等这样的词,在搜索内容时意义不大,一般被称为停止词。

3.大写字母。

代码语言:javascript
复制
4.简写形式如H2O、$、%。

在某些情况下,像这样的简式应该用英文原词代替。

应用自定义分析器

在上面的示例文本中,下表列出了需要执行的操作以及自定义分析器的相应组件

代码语言:javascript
复制
Arun has 100 $ which accounts to 3 % of the total <h2> money </h2>

“ settings”中的层次结构如下所示:

应用所有组件

现在应用上述所有组件创建一个自定义分析器,如下所示:

代码语言:javascript
复制
curl -XPUT localhost:9200/testindex_0204 -d '{
  "settings": {
    "analysis": {
      "char_filter": {
        "subsitute": {
          "type": "mapping",
          "mappings": [
            "$=> dollar",
            "%=> percentage"
          ]
        },
        "html-strip": {
          "type": "html_strip"
        }
      },
      "tokenizer": "standard",
      "filter": {
        "stopwords_removal": {
          "type": "stop",
          "stopwords": [
            "has",
            "which",
            "to",
            "of",
            "the"
          ]
        }
      },
      "analyzer": {
        "custom_analyzer_type_01": {
          "type": "custom",
          "char_filter": [
            "subsitute",
            "html_strip"
          ],
          "tokenizer": "standard",
          "filter": [
            "stopwords_removal",
            "lowercase"
          ]
        }
      }
    }
  },
  "mappings": {
    "test_type": {
      "properties": {
        "text": {
          "type": "string",
          "analyzer": "custom_analyzer_type_01"
        }
      }
    }
  }
}'

这将使用名为“ custom_analyzer_01” 的自定义分析器创建索引。

详细说明了此映射,下图说明了每个部分

使用自定义分析器生成令牌

使用分析器可以看到使用此分析器生成的令牌,如下所示:

代码语言:javascript
复制
curl -XGET "localhost:9200/testindex_0204/_analyze?analyzer=custom_analyzer_type_01&pretty=true" -d 'Arun has 100 $ which accounts to 3 % of the total <h2> money </h2>'

令牌号3和6最初是$ 和%,但随后如本节中所指定的那样被替换为“ dollar”和“ percentage” char_filter 。

还有html标记

代码语言:javascript
复制
<h2> ,</h2>

也被html_strip 过滤器从令牌列表中删除

过滤器 "to","the","which","has"中提到的术语等stopwords 已从令牌列表中删除。

令牌编号1最初看起来应该像是“ Arun”,但已被应用的过滤器小写。

结论

在此博客中,我们看到了如何构建自定义分析器并将其应用于Elasticsearch中的字段。通过这个博客,我打算结束博客系列的第二阶段(索引,映射和分析)。从现在开始,此阶段是理解Elasticsearch的基础部分之一,我们可能会将此阶段的输入用于许多目的。从阶段03开始,我将向您介绍elasticsearch的查询DSL世界。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com