ElasticSearch速学 - 全文检索、分词器、过滤器

Elasticsearch 分词器 Elasticsearch提供了多种内置分词器,如标准分词器(Standard Analyzer)、语言分词器(如中文分词器)等。这些分词器可以根据不同的需求进行选择和配置。同时,Elasticsearch也支持自定义分词器。用户可以根据自己的需求编写分词器,实现自定义的拆分规则和词语处理逻辑。自定义分词器需要编写自己的分词器和字符过滤器,并在Elasticsearch中注册分词器。用户还可以根据自己的需求编写自定义分词器,实现自定义的拆分规则和词语处理逻辑。 阅读详情

今天我们要来学习ElasticSearch的搜索方面的api,在开始之前,为了便于演示,我们先要创建一些索引数据。
这里写图片描述

Search APIs官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/5.3/search.html

1、按name搜索,搜索jack

GET blog/users/_search?q=name:jack

结果如下:

{
  "took": 77,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 0.47000363,
    "hits": [
      {
        "_index": "blog",
        "_type": "users",
        "_id": "103",
        "_score": 0.47000363,
        "_source": {
          "name": "jack",
          "age": 22,
          "sex": 1
        }
      },
      {
        "_index": "blog",
        "_type": "users",
        "_id": "101",
        "_score": 0.47000363,
        "_source": {
          "name": "jack",
          "age": 33,
          "sex": 1
        }
      }
    ]
  }
}

这里写图片描述
使用场景:

1、后台新增一个“客户信息”,除了插入数据库,同时也要插入es索引
2、假设客户类型是”vip”
3、前台取出属于vip类型的客户,那么就要….

2、更常用的方式 Request Body Search
https://www.elastic.co/guide/en/elasticsearch/reference/5.3/search-request-body.html

GET blog/users/_search
{
  "query":{
    "term":{
      "name":"jack"
    }
  }
}

搜索结果:

{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 0.47000363,
    "hits": [
      {
        "_index": "blog",
        "_type": "users",
        "_id": "103",
        "_score": 0.47000363,
        "_source": {
          "name": "jack",
          "age": 22,
          "sex": 1
        }
      },
      {
        "_index": "blog",
        "_type": "users",
        "_id": "101",
        "_score": 0.47000363,
        "_source": {
          "name": "jack",
          "age": 33,
          "sex": 1
        }
      }
    ]
  }
}

3、全文检索

GET blog/users/_search
{
  "query":{
    "match":{
      "name":"我是jack"
    }
  }
}

注意我们这里参数的变化match也能搜到,如果我们用之前term就搜不到啦:

GET blog/users/_search
{
  "query":{
    "term":{
      "name":"我是jack"
    }
  }
}

这里写图片描述

分析器(Analyzer)

三部分构成:
1、字符过滤器(Character Filters)
2、分词器(Tokenizers)
3、分词过滤器(Token Filters)
ES给我们内置啦若干分析器类型,其中常用的是标准分析器,叫做”standard”。我们肯定需要扩展,并使用一些第三方分析器。
不过我们得先了解分析器是怎么工作的:
analyzer通常由一个Tokenizer(怎么分词),以及若干个TokenFilter(过滤分词)、Character Filter(过滤字符)组成。

https://www.elastic.co/guide/en/elasticsearch/reference/5.3/analysis-analyzers.html

1、分析一下“我是jack“这句话

POST _analyze
{
  "analyzer": "standard",
  "text": "我是jack"
}

这里写图片描述
被分成了3个词:我、是、jack。

区分大小写?

POST _analyze
{
  "analyzer": "standard",
  "text": "我是JACK"
}

分词结果一样,说明标准分析内部会给我们转成小写。

2、如果是simple分词呢

POST _analyze
{
  "analyzer": "simple",
  "text": "我是JACK"
}

分词结果就是这样的:

{
  "tokens": [
    {
      "token": "我是jack",
      "start_offset": 0,
      "end_offset": 6,
      "type": "word",
      "position": 0
    }
  ]
}

可见simple和standard的不同。

但simple效率肯定是最高的,我们可以分析下面字符串:

POST _analyze
{
  "analyzer": "simple",
  "text": "我 是 JACK"
}

注意字符串的空格,这样分词结果如下:

{
  "tokens": [
    {
      "token": "我",
      "start_offset": 0,
      "end_offset": 1,
      "type": "word",
      "position": 0
    },
    {
      "token": "是",
      "start_offset": 2,
      "end_offset": 3,
      "type": "word",
      "position": 1
    },
    {
      "token": "jack",
      "start_offset": 4,
      "end_offset": 8,
      "type": "word",
      "position": 2
    }
  ]
}

3、Standard Tokenizer
https://www.elastic.co/guide/en/elasticsearch/reference/5.3/analysis-standard-tokenizer.html

POST _analyze
{
  "tokenizer": "standard",
  "text": "我是JACK"
}

分词结果和"analyzer": "standard",一样。

4、如果仅仅是转小写

POST _analyze
{
  "tokenizer": "lowercase",
  "text": "我是JACK"
}

最后转小写,并没有分词:

{
  "tokens": [
    {
      "token": "我是jack",
      "start_offset": 0,
      "end_offset": 6,
      "type": "word",
      "position": 0
    }
  ]
}

5、如果我们既想分词,又想转小写

POST _analyze
{
  "tokenizer": "standard",
  "filter": ["lowercase"], 
  "text": "我是JACK"
}

结果如下:

{
  "tokens": [
    {
      "token": "我",
      "start_offset": 0,
      "end_offset": 1,
      "type": "<IDEOGRAPHIC>",
      "position": 0
    },
    {
      "token": "是",
      "start_offset": 1,
      "end_offset": 2,
      "type": "<IDEOGRAPHIC>",
      "position": 1
    },
    {
      "token": "jack",
      "start_offset": 2,
      "end_offset": 6,
      "type": "<ALPHANUM>",
      "position": 2
    }
  ]
}

6、html字符过滤

如果我们搜索我是<br>JACK</b>,其中有html字符,我们想过滤html字符怎么办。
https://www.elastic.co/guide/en/elasticsearch/reference/5.3/analysis-htmlstrip-charfilter.html

POST _analyze
{
  "tokenizer": "standard",
  "filter": ["lowercase"], 
  "char_filter":  [ "html_strip" ],
  "text": "我是<br>JACK</b>"
}
深入理解 ElasticSearch 分词器:详解各种分词器的原理与应用 ElasticSearch还支持用户自定义分词器,以满足特殊的分词需求。用户可以根据实际业务场景和数据特点,灵活配置字符过滤器、分词器和词项过滤器。ElasticSearch分词器在文本处理和全文搜索中发挥着至关重要的作用。通过深入了解各种分词器的原理和应用场景,我们可以更好地利用ElasticSearch进行高效、准确的全文搜索和分析。无论是处理英文文档还是中文文本,ElasticSearch分词器都能提供强大的支持,满足不同场景下的搜索需求。 阅读详情

相关推荐

Elasticsearch 分词器:核心作用与场景化 最佳实践

Elasticsearch分词器是全文检索的核心引擎,负责将文本转化为可索引的语义单元。其核心功能包括文本标准化(统一大小写/格式)、语义拆分(适配不同语言特性)和噪声过滤(去除停用词)。选择分词器需考虑语言类型和业务场景:英文推荐Standard分词器,中文必须使用IK等专业分词器,精确匹配场景适用Keyword/Whitespace,日志分析适合Simple/Pattern分词器。多语言混合场景可通过Multi-field组合多种分词器。实际应用中需通过_analyze API测试验证分词效果,确保检索

上善若水 1426

【elasticsearch】查询语句的分词过滤和不分词过滤

文章目录【elasticsearch】查询语句的分词过滤和不分词过滤一、分词查询二、全词查询 【elasticsearch】查询语句的分词过滤和不分词过滤 在对 elasticsearch 进行查询的时候,对于 “is a” 这种的包含默认分隔符的查询条件,查询语句会分为全词查询和分词查询两种情况,不注意的话,很容易得到错误数据; 下面介绍一下适用于各种需要查询语句情况的两个例子; 一、分词查询 使用 match ,查询语句包含默认分隔符,例如空格,就会使用分词来查询结果; 比如:are you,就会返

问题不大 6291

(最新更新!)2024全国大学生数学建模竞赛(国赛)B题决策优化+鲁棒模型完整建模全解全析

2024全国大学生数学建模竞赛(国赛)B题完整建模全解全析(已更新!)

Yilu264的博客 9417

Elasticsearch分词

ES的分词 1.什么是分析 分析是在文档被发送并加入倒排索引之前,Elasticsearch在其主体上进行的操作。一般会经历下面几个阶段。 字符过滤:使用字符串过滤器转变字符串。 文本切分为分词:将文本切分为单个或多个分词。 分词过滤:使用分词过滤器转变每个分词。 分词索引:将这些分词存储到索引中。 1、character filter:在一段文本进行分词之前,先进行预处理,比如说最常见的就是,...

qq_29860591的博客 922

从零到一:手把手教你用STM32和WiFi打造智能温室大棚的物联网核心

本文详细介绍了如何利用STM32单片机和WiFi技术从零构建智能温室大棚的物联网核心系统。内容涵盖硬件选型、传感器集成、低功耗WiFi通信、自动控制逻辑及OLED显示,提供实际部署中的优化技巧和故障排查方案,帮助开发者打造稳定可靠的农业自动化解决方案。

c7d8e的博客 178

modelsim软件安装教程及踩坑(极简版)

1.安装的网盘链接:链接:https://pan.baidu.com/s/1ltUfssyXlCnqDmLhWyhlwA提取码:jery 2.步骤(参考博文):https://blog.youkuaiyun.com/weixin_42693097/article/details/90523692?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163521788716780357213801%2522%252C%2522scm%2522%253A%2522

subtitle_的博客 3778

全文检索ElasticSearch(一篇就够了)

一 Elasticsearch的简介和安装 1.1 Elasticsearch是什么 Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。 ES使用Java开发并使用Lucene作为其核心来实现索引和搜索的功能,但是它通过简单的RestfulAPI和javaAPI来隐藏Lucene的复杂性,从而让全文搜索变得简单。 起源:Shay Banon。2004年失业,陪老婆去伦敦学习厨师。

mjl1125的博客 7054

Allegro如何设置走线自动删除重复走线操作指导

Allegro如何设置走线是自动删除重复走线操作指导在PCB布线的时候,点到点需要重复走一段线的时候,希望原来的线段自动被删除,Allegro设计的时候支持这个操作如下图,重复走中间的线段的时候,希望下方的走线自动删除具体操作如下This section is describe what the function allegro have ,helpfully could let user know more about allegroAllegro Design and Analysis includes

weixin_54787054的博客 4497

PHP使用Elasticsearch 全文搜索引擎的开发

PHP基于elasticsearch全文搜索引擎的开发 1.概述: 全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。Elastic 的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elastic 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。Ela...

lchmyhua88的博客 7223

微信小程序 - 最新详细实现 “餐厅食堂外卖点餐“ 全屏左右联动菜单列表功能界面,附带搜索框、购物车功能、商品加减计算金额、折扣等,左侧商品分类,右侧列表数据,仿美团饿了么外卖点餐页面,饭店扫码点餐!

微信小程序,vue2,vue3,左右联动菜单,商品分类页面,点餐界面,美团外卖点餐,左右布局界面,饿了么点餐页面,左分类右列表,小程序实现左侧菜单,外卖点餐联动,锚点,点击左侧大类后侧列表跟着变跟着刷新,菜单左右联动效果,左菜单右边列表数据,uniapp,左侧菜单,右侧列表双向联动效果,右侧商品滑动时,右侧列表双向联动效果,侧边菜单和右边滚动条,电商项目,购物车,商品加减计算,外卖选餐页面带购物车计算,自动计算金额,微信小程序外卖点餐界面源码,店铺页面滑动左右联动,点餐类小程序界面,堂食,扫码点餐,餐饮行业

🏆 前端领域优质创作者 5157

手把手教你学PCIE--系统内存管理:GART(Graphics Address Remapping Table)的典型用途详解

GART(图形地址重映射表)是GPU的核心组件,主要用于地址映射转换。其典型用途分为物理模式和虚拟模式两类:在物理模式下,GART将GPU虚拟地址映射到分散的物理内存,支持DMA连续访问非连续内存块,适用于GPU渲染纹理采样和AI推理数据搬运等场景;在虚拟模式下,GART配合IOMMU实现多级映射,将GPU虚拟地址转换为虚拟机物理地址再映射到宿主机物理地址,确保多租户隔离,应用于云服务器GPU共享和容器化AI训练等虚拟化环境。两种模式分别优化了高性能计算场景和虚拟化场景的需求。

MHD0815的博客 366

elasticsearch8.2 + ik中文分词,打造全文搜索

我的环境是centos7 64位的系统,需要jdk1.8以上版本 elasticsearch官网下载地址: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-linux-x86_64.tar.gz & 下载ik分词插件:https://github.com/medcl/elasticsearch-analysis-ik/releases wgethttps://github.com..

或非与博客 4953

Jenkins部署前后端分离项目最全图文教程(手把手教学)

最近Jenkins部署的热度比较高,于是就想出一篇关于我是如何使用Jenkins部署前后端分离项目的,本篇记录了我是如何一步一步去配置、搭建和部署的完整流程,每一行代码都进行了实测和讲解,通过图文的教学写成博客分享给大家!

黄团团的个人博客 4777

【橘子ES】分词器的概念

我们已经知道了分词器的三个组成,其实es中是支持你自己组合这三个部分,进而形成一个自定义的分词器。我们来编一个需求,我们从源端过来的数据,可能长这样,I' am sohappy!我很开心,并且你给了我一个礼物,所以你能说一句去你的java吗。这就是本句话的意思,1、我们看到有很多html标签,我们要去掉。(char_filter用html_strip)2、但是html标签我们要保留p标签,因为后面要分段落。

liuwenqiang1314的博客 1257

Python爬虫抓取淘宝商品详情页信息:从入门到高级技术应用

通过本篇博客,我们了解了如何使用Python爬虫抓取淘宝商品详情页的信息,如何使用requests和Selenium抓取静态和动态内容,如何应对淘宝的反爬虫机制,如何将抓取的数据保存到CSV文件等。随着爬虫技术的不断发展,开发者可以根据需要选择合适的工具和技术,如使用分布式爬虫框架提高抓取效率,或者利用OCR技术处理验证码等问题。在进行淘宝爬虫时,需要注意遵循相关法律法规和平台的爬虫政策,避免对平台造成过度的负担或侵犯其合法权益。

2201_76125261的博客 460

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ES 分词器

顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。在 ES 中,Analysis是通过分词器(Analyzer) 来实现的,可使用 ES 内置的分析器或者按需定制化分析器。举一个分词简单的例子:比如你输入 Mastering Elasticsearch,会自动帮你分成两个单词,一个是 mastering,另一个是 elasticsearch,可以看出单词也被转化成了小写的。

tian830937的专栏 3007

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

2025最新ES面试题整理(Elasticsearch面试指南系列)

Elasticsearch经典面试题:10/50

Elastic开源社区 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【9种】ElasticSearch分词器详解,一文get!!!| 博学谷狂野架构师

分词器的主要作用将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。在 ES 中,Analysis 是通过分词器(Analyzer)来实现的,可使用 ES 内置的分析器或者按需定制化分析器。举一个分词简单的例子:比如你输入,会自动帮你分成两个单词,一个是mastering,另一个是,可以看出单词也被转化成了小写的。当内置的分词器无法满足需求时,可以创建custom类型的分词器。

博学谷狂野架构师的博客 1万+

Elasticsearch安装IK分词器,kibana安装是基本使用,DSL语句入门

3. 安装IK分词器 ElasticSearch 默认采用的分词器, 是单个字分词 ,效果很差 ,所以我们需要安装一个更实用的分词器,这里采用IK分词器 中文分词器 IK Analyzer 3.0 发布 3. 安装 Kibana Kibana是一个针对Elasticsearch的开源分析及可视化平台,使用Kibana可以查询、查看并与存储在ES索引的数据进行交互操作,使用Kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据。 Kibana 是 ELK 的一个组成。 E:EalsticSea

Java小皮孩 1万+

深度解析:Elasticsearch 自定义分词器的构建与优化实践

在全文检索中,分词器是非常重要的组成部分,尤其是在处理中文等语言时,分词效果直接影响到搜索的精准度和效率。Elasticsearch 作为一个强大的分布式搜索引擎,它提供了许多内置的分词器,但有时候默认的分词器不能满足我们的需求,这时就需要通过自定义分词器来更好地适应我们的数据结构和业务需求。比如,在英文和中文混合的环境下,可以通过自定义分词器,将英语分词器和中文分词器组合起来。对于某些业务,可能有需要去除的特定词汇(例如常见的代词、助词等),可以通过自定义分词器加入特定的停用词过滤器来提高搜索效果。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1180

elasticsearch核心知识--34.搜索引擎_分析器的内部组成到底是什么,以及内置分词器的介绍

一、概念介绍    全文搜索引擎会用某种算法对要建索引的文档进行分析, 从文档中提取出若干Token(词元), 这些算法称为Tokenizer(分词器), 这些Token会被进一步处理, 进行normalization时态转化,转成小写等, 这些处理算法被称为Token Filter(词元处理器), 被处理后的结果被称为Term(词), 文档中包含了几个这样的Term被称为Frequency(词频...

mengxpFighting的博客 576

Elasticsearch-分词器详解

1、分词器介绍对文本进行分析处理的一种手段,基本处理逻辑为按照预先制定的分词规则,把原始文档分割成若干更小粒度的词项,粒度大小取决于分词器规则。常用的中文分词器有ik按照切词的粒度粗细又分为:ik_max_word和ik_smart;英文分词器standard会将文本做最细粒度的拆分,会穷尽各种可能的组合,适合 Term Query;ik_smart:会做最粗粒度的拆分,适合 Phrase 查询"text": ["布布努力学习编程"]"token" : "布",},

qq_37200262的博客 1202

Elasticsearch 全文检索概述

基于数十年的信息检索领域研究成果构建,全文检索可输出稳定可靠的检索结果,且其性能可随数据体量的增长实现可预期的线性扩展。分析器:文本分析的完整执行单元,Elasticsearch内置多种开箱即用的分析器,同时支持用户自定义,适配电商、法律、医疗等不同业务场景。,区别于传统“文档ID→内容”的正排索引,倒排索引的结构为「词项 → 包含该词项的所有文档ID+词频、位置等元数据」。支持相关性打分:索引中存储的词频、文档频率、位置信息,是BM25算法的核心数据来源,可实现精准的结果排序。

海兰 1034

ES自定义分词器

ES自定义分词器 es的分词器往往包括3个低级构建块包: character filters - 字符过滤器,可以添加、删除或更改字符来转换流,一个分析器可有多个字符过滤器; token filters - token过滤器,接受token流,并可以添加、删除或修改token,不允许更改每个token的位置或字符偏移量,一个分析器可有多个token过滤器,并按顺序应用。 tokenizer...

Anglry的博客 1572

es使用记录笔记,分词器的问题

分词器

CuiGongZi的博客 919
上一篇: ElasticSearch速学 - 分析与可视化工具Kibana初识
下一篇: ElasticSearch速学 - 自定义分析器、备份和恢复索引数据
学习笔记666
博客等级 码龄12年 1047粉丝 1369原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值