Elasticsearch筛选分词使用

Analysis介绍

Elasticsearch的Rest API中analysis设置用于定义自定义的文本分析过程,以满足特定的搜索和索引需求。以下是 char_filterfiltertokenizeranalyzer 属性的区别和作用:

1. char_filter(字符过滤器)

  • 作用:在文本被分词之前,首先对文本执行字符级的预处理操作。
  • 使用场景:用来处理输入文本中的特定字符,例如替换、删除或转换某些字符或字符序列。
  • 示例操作
    • 替换 HTML 实体(如 转换为空格)。
    • 删除特定符号(如删除某些控制字符)。
  • 应用顺序char_filter 先于分词器(tokenizer)运行。

示例配置

"char_filter": {
  "html_strip": {
    "type": "html_strip"
  }
}

2. tokenizer(分词器)

  • 作用:将输入文本分解成一个个独立的词项(tokens)。
  • 使用场景:指定如何根据语言规则或其他逻辑将文本切分为词语或子单元。
  • 常用分词器
    • standard:默认的标准分词器,基于 Unicode 文本分词规则。
    • whitespace:按空格分词。
    • keyword:将整个文本视为单一词项。
    • pattern:基于正则表达式的分词器。

示例配置

"tokenizer": {
  "my_tokenizer": {
    "type": "whitespace"
  }
}

3. filter(过滤器)

  • 作用:在文本被分词之后,对分词结果进行进一步的处理。
  • 使用场景:修改或增强分词器生成的词项,例如去除停用词、词干提取、同义词替换等。
  • 常用过滤器
    • lowercase:将词项转为小写。
    • stop:移除停用词。
    • synonym:同义词替换。
    • stemmer:提取词干。
    • length:过滤掉特定长度的词项。

示例配置

"filter": {
  "my_stop_filter": {
    "type": "stop",
    "stopwords": ["the", "a", "an"]
  }
}

4. analyzer(分析器)

  • 作用analyzer 是分词和过滤链条的集合,用于定义完整的文本分析流程。
  • 使用场景:通过组合 char_filtertokenizerfilter 来创建自定义的文本分析器。
  • 主要类型
    • 内置分析器:如 standardwhitespacesimple 等。
    • 自定义分析器:可以通过自定义 char_filtertokenizerfilter 组合来满足特定需求。

示例配置

"analyzer": {
  "my_analyzer": {
    "type": "custom",
    "char_filter": ["html_strip"],
    "tokenizer": "standard",
    "filter": ["lowercase", "my_stop_filter"]
  }
}

组合使用

  • char_filter:在分词之前对原始文本进行处理。
  • tokenizer:将文本分解为词项。
  • filter:对分词后的词项进一步处理。
  • analyzer:整合上述三个步骤,定义完整的文本分析流程。

通过这些组件的组合,Kibana 和 Elasticsearch 可以灵活地处理和分析各种格式的文本内容,从而实现更高效的全文搜索和查询优化。

DELETE my_index
PUT my_index
{
  "settings": {
    "analysis": {
      "char_filter": {
        "my_char_filter": {
          "type": "pattern_replace",
          "pattern": """(\d{3})\d{4}(\d{4})""",
          "replacement": "$1****$2"
        }
      },
      "filter": {
        "my_stopword": {
          "type": "stop",
          "stopwords": [
            "is",
            "in",
            "the",
            "a",
            "at",
            "for"
          ]
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "pattern",
          "pattern": "[,.!?]"
        }
      },
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "char_filter": [
            "my_char_filter"
          ],
          "tokenizer": "my_tokenizer",
          "filter": "my_stopword"
        }
      }
    }
  }
}

# 测试
GET my_index/_analyze
{
  "analyzer": "my_analyzer",
  "text": ["hello, my,phone,is,:12345678901"]
}
posted @   litayun  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示