一、ES分词介绍

ES中在添加数据,也就是创建索引的时候,会先对数据进行分词。
在查询索引数据的时候,也会先根据查询的关键字进行分词。
所以在ES中分词这个过程是非常重要的,涉及到查询的效率和准确度。

假设有一条数据,数据中有一个字段是titile,这个字段的值为LexCorp BFG-9000。
我们想要把这条数据在ES中创建索引,方便后期检索。

创建索引和查询索引的大致流程是这样的:

在这里插入图片描述
图中左侧是创建索引的过程:
首先对数据进行空白字符分割,将LexCorp BFG-9000切分为LexCorp和BFG-9000。
然后进行单词切割,将LexCorp切分为Lex和Corp,BFG-9000切分为BFG和9000。
最后执行小写转换操作,将英文单词全部转换为小写。

图中右侧是查询索引的过程:
后期想要查询LexCorp BFG-9000这条数据,但是具体的内容记不清了,大致想起来了一些关键词Lex corp bfg9000。

接下来就根据这些关键词进行查询,
首先还是对数据进行空白符分割,将Lex corp bfg9000切分为Lex、corp 和bfg9000。
然后进行单词切割,Lex和corp不变,将bfg9000切分为bfg和9000。
最后执行小写转换操作,将英文单词全部转换为小写。
这样其实在检索的时候就可以忽略英文大小写了,因为前面在创建索引的时候也会对英文进行小写转换。

到这可以发现,使用Lex corp bfg9000是可以查找到LexCorp BFG-9000这条数据的,因为在经过空白符分割、单词切割、小写转换之后,这两条数据是一样的,其实只要能有一个单词是匹配的,就可以把这条数据查找出来。

了解了这个流程之后,我们以后在搜索引擎里面搜索一些内容的时候其实就知道要怎么快速高效的检索内容了,只需要输入一些关键词,中间最好用空格隔开,针对英文字符不用纠结大小写了。

这些数据在ES中分词之后,其实在底层会产生倒排索引,注意了,倒排索引是ES能够提供快速检索能力的核心,下面来看一下这个倒排索引

二、倒排索引介绍

假设有一批数据,数据中有两个字段,文档编号和文档内容。
在这里插入图片描述
针对这一批数据,在ES中创建索引之后,最终产生的倒排索引内容大致是这样的:
在这里插入图片描述
解释:

单词ID:记录每个单词的单词编号。
单词:对应的单词。
文档频率:代表文档集合中有多少个文档包含某个单词。
倒排列表:包含单词ID及其它必要信息。
DocId:单词出现的文档id。
TF:单词在某个文档中出现的次数。
POS:单词在文档中出现的位置。

以单词 加盟 为例,其单词编号为6,文档频率为3,代表整个文档集合中有3个文档包含这个单词,对应的倒排列表为{(2;1;<4>),(3;1;<7>),(5;1;<5>)},含义是在文档2,3,5中出现过这个单词,在每个文档中都只出现过1次,单词 加盟 在第一个文档的POS(位置)是4,即文档的第四个单词是 加盟 ,其它的类似。
这个倒排索引已经是一个非常完备的索引系统,实际搜索系统的索引结构基本如此。

三、分词器的作用

前面分析了ES在创建索引和查询索引的时候都需要进行分词,分词需要用到分词器。下面来具体分析一下分词器的作用:

分词器的作用是把一段文本中的词按照一定规则进行切分。

分词器对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的。
也就是说不同的分词器分词的规则是不同的!

所以对于不同的语言,要用不同的分词器。
在创建索引时会用到分词器,在搜索时也会用到分词器,这两个地方要使用同一个分词器,否则可能会搜索不出结果。

四、分词器的工作流程

分词器的工作流程一般是这样的:

1、切分关键词,把关键的、核心的单词切出来。
2、去除停用词。
3、对于英文单词,把所有字母转为小写(搜索时不区分大小写)
针对停用词下面来详细分析一下。

五、停用词

有些词在文本中出现的频率非常高,但是对文本所携带的信息基本不产生影响。
例如:
英文停用词:a、an、the、of等
中文停用词:的、了、着、是、标点符号等

文本经过分词之后,停用词通常被过滤掉,不会被进行索引。
在检索的时候,用户的查询中如果含有停用词,检索系统也会将其过滤掉(因为用户输入的查询字符串也要进行分词处理)。
排除停用词可以加快建立索引的速度,减小索引库文件的大小,并且还可以提高查询的准确度。
如果不去除停用词,可能会存在这个情况:
假设有一批文章数据,基本上每篇文章里面都有 的 这个词,那我在检索的时候只要输入了的这个词,那么所有文章都认为是满足条件的数据,但是这样是没有意义的。

1、常见的英文停用词汇总:

a
about
above
after
again
against
all
am
an
and
any
are
aren't
as
at
be
because
been
before
being
below
between
both
but
by
can't
cannot
could
couldn't
did
didn't
do
does
doesn't
doing
don't
down
during
each
few
for
from
further
had
hadn't
has
hasn't
have
haven't
having
he
he'd
he'll
he's
her
here
here's
hers
herself
him
himself
his
how
how's
i
i'd
i'll
i'm
i've
if
in
into
is
isn't
it
it's
its
itself
let's
me
more
most
mustn't
my
myself
no
nor
not
of
off
on
once
only
or
other
ought
our
ours
ourselves
out
over
own
same
shan't
she
she'd
she'll
she's
should
shouldn't
so
some
such
than
that
that's
the
their
theirs
them
themselves
then
there
there's
these
they
they'd
they'll
they're
they've
this
those
through
to
too
under
until
up
very
was
wasn't
we
we'd
we'll
we're
we've
were
weren't
what
what's
when
when's
where
where's
which
while
who
who's
whom
why
why's
with
won't
would
wouldn't
you
you'd
you'll
you're
you've
your
yours
yourself
yourselves

2、常见的中文停用词汇总:

的
一
不
在
人
有
是
为
以
于
上
他
而
后
之
来
及
了
因
下
可
到
由
这
与
也
此
但
并
个
其
已
无
小
我
们
起
最
再
今
去
好
只
又
或
很
亦
某
把
那
你
乃
它
吧
被
比
别
趁
当
从
到
得
打
凡
儿
尔
该
各
给
跟
和
何
还
即
几
既
看
据
距
靠
啦
了
另
么
每
们
嘛
拿
哪
那
您
凭
且
却
让
仍
啥
如
若
使
谁
虽
随
同
所
她
哇
嗡
往
哪
些
向
沿
哟
用
于
咱
则
怎
曾
至
致
着
诸
自

六、中文分词方式

针对中文而言,在分词的时候有多种分词规则:
常见的有单字分词、二分法分词、词库分词等
单字分词:“我”、“们”、“是”、“中”、“国”、“人”
二分法分词:“我们”、“们是”、“是中”、“中国”、“国人”。
词库分词:按照某种算法构造词,然后去匹配已建好的词库集合,如果匹配到就切分出来成为词语。

从这里面可以看出来,其实最理想的中文分词方式是词库分词。

七、常见的中文分词器

针对前面分析的几种中文分词方式,对应的有一些已经实现好的中分分词器。
在这里插入图片描述
在词库分词方式领域里面,最经典的就是IK分词器,你懂得!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐