遇到的问题
通过前面的学习,我们已经可以使用elasticsearch来进行数据的搜索了,但此时我们发现了一个问题,这个问题如果没有解决好就很影响我们后续的使用,那么该问题是什么呢?我们来看一下:
上面的截图是我搜索“在”关键字出来的结果,按照正常情况下,我们是不是不应该搜索“在”也出来结果呢?因为我们做的是搜索,不是模糊查询,既然是搜索的话,那像这种没有意义的关键字就不应该搜索出来才对的,还有像类似“在”、“是”、“了”等等这些单独存在不能构成一个中文词义的字符也可以搜索了,这显然是一种搜索效果不好的方式。还有一个问题,我们看看下面的截图:
上面这个截图是我搜索“中国人”这个关键词出来的结果,然后我们通过高亮匹配的内容发现,它是“中”、“国”、“人”拆成3个关键字去匹配内容了,而我们想要的是它匹配“中国人”,“中国”,“人”这样的搜索效果,但现在的情况却是每个中文字符都能搜索,这样就不太智能了。
那从表面上看,出现以上两个问题的原因貌似是因为elasticsearch对中文的分词不太智能,它现在的分词只是简单的安照每个中文字符来分,那如果我们想让elasticsearch的搜索能更智能一点,分析出我们搜索的关键字是否有含义,然后只搜这些有含义的词语,比如“中国人”,“中国”,“人”,这样的话我们要做什么操作才能让elasticsearch支持呢?这个就是我们接下来要探讨的问题了。
其实这个问题对elasticsearch来说是很好解决的,我们只需要换一个分词算法就可以了,但是为了让大家对elasticsearch的搜索过程和底层的分词原理有一个比较深刻的了解,我们不忙着切换其他分词算法,而是先来看看全文检索的一些基础知识,不然的话大家也仅仅只停留在会用的阶段,都不知道它底层做了什么事情。
数据类型
在详细了解全文搜索前,我们先来看看平时我们开发一个应用会遇到什么样的数据,这些数据是属于什么类型的,通过对这些数据的了解,我们接下来才能知道全文搜索&