Elasticsearch 的 NGram 分词器使用技巧

article/2025/9/26 11:42:24

一、什么是NGram 分词器?

NGram分词器是ES自带的具有前缀匹配搜索功能的一个文本分词器。它能根据文本的步长逐步对写入的文本内容进行约束切割;

二、NGram和index-time搜索推荐原理

搜索的时候,不用再根据一个前缀,然后扫描整个倒排索引了,而是简单的拿前缀去倒排索引中匹配即可,如果匹配上了,那么就好了,就和match query全文检索一样。

官方文档:NGram Tokenizer | Elasticsearch Guide [6.8] | Elastic

官方介绍如下:

默认设置下,ngram标记器将初始文本视为单个标记,并生成最小长度为1、最大长度为2的N个字符串,这个最大最小长度我们是可以配置的。

例如:

POST _analyze
{"tokenizer": "ngram","text": "Quick Fox"
}

上述句子将产生以下术语:

空格也会进行分词

[ Q, Qu, u, ui, i, ic, c, ck, k, "k ", " ", " F", F, Fo, o, ox, x ]

三 配置参数

The ngram tokenizer accepts the following parameters:

min_gram

Minimum length of characters in a gram. Defaults to 1.

max_gram

Maximum length of characters in a gram. Defaults to 2.

token_chars

Character classes that should be included in a token. Elasticsearch will split on characters that don’t belong to the classes specified. Defaults to [] (keep all characters).

应包含在令牌中的字符类。Elasticsearch将对不属于指定类的字符进行拆分。默认值为[](保留所有字符)。也就是遇到这些字符会进行分词。

Character classes may be any of the following:

  • letter —  for example abï or 
  • digit —  for example 3 or 7
  • whitespace —  for example " " or "\n"
  • punctuation — for example ! or "
  • symbol —  for example $ or 

TIP:将min_gram和max_gram设置为相同的值通常是有意义的。长度越小,匹配的文档越多,但匹配的质量越低。长度越长,匹配的内容就越具体。三克(长度3)是一个很好的起点。

例子:

PUT my_index
{"settings": {"analysis": {"analyzer": {"my_analyzer": {"tokenizer": "my_tokenizer"}},"tokenizer": {"my_tokenizer": {"type": "ngram","min_gram": 3,"max_gram": 3,"token_chars": ["letter","digit"]}}}}
}POST my_index/_analyze
{"analyzer": "my_analyzer","text": "2 Quick Foxes."
}

分词:

[ Qui, uic, ick, Fox, oxe, xes ]


http://chatgpt.dhexx.cn/article/exEtXbyf.shtml

相关文章

Ngram模型

N-Gram是大词汇连续语音识别中常用的一种语言模型,对中文而言,我们称之为汉语语言模型(CLM, Chinese Language Model)。汉语语言模型利用上下文中相邻词间的搭配信息,在需要把连续无空格的拼音、笔划,或代表字母或笔划的数字&…

ElasticSearch之ngram分词器

一、什么是NGram 分词器? edge_ngram和ngram是ElasticSearch自带的两个分词器,一般设置索引映射的时候都会用到,设置完步长之后,就可以直接给解析器analyzer的tokenizer赋值使用。 二、怎么使用 完整的索引结构: {&…

MySql的Ngram全文索引

前言 在我们日常开发中,很多时候会遇到对数据库中某个字段模糊查询的需求,也就是like某个字段,但是很多公司像阿里,京东都禁止使用like来对数据库进行模糊查询,原因是啥呢? 我们先来看下面三条语句 其中t…

语言模型-Ngram

总结工作中用到和学习的知识,也算自己的一个笔记。 语言模型 语言模型简单来讲,就是计算一个句子的概率,更确切的说是计算组成这个句子一系列词语的概率。 举个简单的例子,我们知道“武松打死了老虎”相比于“老虎了死武松打”,更像是一句正常的话,这是因为前者出…

N-gram算法

语言模型 语言模型起源于语音识别(speech recognition),输入一段音频数据,语音识别系统通常会生成多个句子作为候选,究竟哪个句子更合理?就需要用到语言模型对候选句子进行排序。 语言模型:对于任意的词序列&#xf…

N-Gram语言模型

一、n-gram是什么 wikipedia上有关n-gram的定义: n-gram是一种统计语言模型,用来根据前(n-1)个item来预测第n个item。在应用层面,这些item可以是音素(语音识别应用)、字符(输入法应用)、词&am…

MATLAB 离散傅里叶变换(DFT)、逆离散傅里叶变换(IDFT)、快速傅里叶变换(FFT)的实现

离散傅里叶变换(DFT)、逆离散傅里叶变换(IDFT)的实现 代码如下,其中xn为时序序列 clc;clear; xn[7,6,5,4,3,2]; Xkdft(xn,6); xidft(Xk,6);subplot(2,2,1);stem(0:5,abs(Xk),filled); axis([0,5,0,1.1*max(abs(Xk))]…

图像处理基础(三)DFT与IDFT变换

傅里叶变换(DFT) 首先来看看傅里叶(DFT)变换的公式 (1) FP\frac {1}{N}\sum_{x0}^{N-1}\sum_{y0}^{N-1}P_{x,y}\exp(-j(\frac{2 \pi}{N})(uxvy)) 幅度 (2) w\sqrt{u^2v^2} 其中 u,v代表空间频率,即灰度梯度,梯度由坐标与灰度值求导的向量 w代表 振幅…

第4章 Python 数字图像处理(DIP) - 频率域滤波7 - 二维DFT和IDFT的一些性质 - 傅里叶频谱和相角

目录 二维DFT和IDFT的一些性质傅里叶频谱和相角 二维DFT和IDFT的一些性质 傅里叶频谱和相角 F ( u , v ) R ( u , v ) j I ( u , v ) ∣ F ( u , v ) ∣ e j ϕ ( u , v ) (4.86) F(u, v) R(u, v) jI(u, v) |F(u, v)|e^{j\phi(u,v)} \tag{4.86} F(u,v)R(u,v)jI(u,v)∣F(…

实数序列频谱的共轭对称性(DFT与IDFT仿真实现)

一、基础知识 1、傅里叶变换:通俗来讲,是以时间为自变量的信号与以频率为自变量的“频谱函数”之间的某种转换关系。 DFT:即离散傅里叶变换,对离散序列进行傅里叶变换。设x(n)为长度为M的有限长序列,其N点DFT定义(公…

第4章 Python 数字图像处理(DIP) - 频率域滤波8 - 二维DFT和IDFT的一些性质 - 二维离散卷积定理

目录 二维DFT和IDFT的一些性质二维离散卷积定理二维离散傅里叶变换性质的小结 二维DFT和IDFT的一些性质 二维离散卷积定理 二维循环卷积表达式: ( f ⋆ h ) ( x , y ) ∑ m 0 M − 1 ∑ n 0 N − 1 f ( m , n ) h ( x − m , y − n ) (4.94) (f \star h)(x, …

FFT学习笔记(DFT,IDFT)

昨天参悟了一天FFT,总算是理解了,今天的莫比乌斯反演也不太懂,干脆弃疗,决定来认真水一发博客。 什么是FFT? FFT(Fast Fourier Transformation),即为快速傅氏变换,是离散傅氏变换&…

【OpenCV4】图像的傅里叶变换 cv::dft() 和逆变换 cv::idft() 解析(c++)

图像傅里叶变换的作用: 频谱分析,获取图像中高频低频的分布情况快速卷积,两个矩阵的傅里叶变换结果相乘 案例代码: cv::Mat TestOpencvDft() {cv::Mat lena cv::imread("lena.jpg", 0);cv::resize(lena, lena, cv::…

Matlab如何进行利用离散傅里叶逆变换iDFT 从频谱恢复时域信号

文章目录 1. 定义2. 变换和处理3. 函数4. 实例演示例1:单频正弦信号(整数周期采样)例2:含有直流分量的单频正弦信号例3:正弦复合信号例4:含有随机干扰的正弦信号例5:实际案例 5. 联系作者 1. 定…

离散傅里叶变换(DFT/IDFT、FFT/IFFT)运算量的讨论

前言:关于为什么要写这个博客 最近在重新看《合成孔径雷达成像 算法与实现》这本书,看到“离散傅里叶变换记其逆变换的运算量级为”这句话,就想起当初在学《数字信号处理》中FFT那章节时,书中有对比DFT和FFT的运算量的一些文字&am…

OpenCV-离散傅里叶变换cv::dftcv::idft

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 函数原型 void dft(InputArray src, OutputArray dst, int flags 0, int nonzeroRows 0); void idft(InputArray src, Output…

12点的idft c语言,【整理】用IDFT实现UF-OFDM和OFDM的模拟调制

cooperate with Liu Lei 用IDFT实现OFDM的代码如下: N32; xrandint(1,N,[0 3]); x1qammod(x,4); f1:N; t0:0.001:1-0.001; w2*pi*f.*t; % w12*pi*(f0.2).*t; y1x1*exp(j*w);%子载波调制 x2ifft(x1,N); %ifft figure(1); plot(t,abs(y1)); hold on; stem(0:1/N:1-1/N…

离散傅立叶变换推导(DF、IDFT)

mazonex离散傅立叶变换视频笔记 需要先了解傅里叶变换推导(FT、IFT) 本文仅作为笔记,推导思想和图片来自视频 周期为 2 π 2\pi 2π的函数的复数形式展开(傅里叶级数) 在上一篇文章中part4中提到周期 T 2 L T2L T2L函数的复数形式展开为: f ( t ) ∑…

浅谈傅里叶——8. 一维iDFT的实现

这是本系列的最后一章,原先计划是把这部分内容一并挪到上一章里的,不过喜欢凑一个整数,而且想骗一点流量,所以把它们拆成了两部分。我们在前面的内容中,通过使用不同的频率信号对原始信号进行采样,从而分析…

idft重建图像 matlab_1周学FFT——第2天 DFT和IDFT的MATLAB实现

根据定义式,可写出DFT的MATLAB代码如下[从玉良,2009,p72]: function [f, Xk] mydft(xn, fs, N) % DFT n [0:1:N-1]; k n; WN exp(-j*2*pi/N); nk n * k; % N^2 times multiply Xk xn(1:N) * WN.^nk; % N^3 times multiply f …