使用停用词的利弊
我们拥有更多硬盘资源,但是比较少的内存资源。从索引中去掉一些停用词平均每百万个文档中也就节省了4MB的资源。所以停用词并不是来节省存储资源的。
并且,我们移除一些停用词会带来一些坏处。比如我们就很难无法做到以下几种事情:
- 区分 happy from not happy
- 搜索 the band The The
- 找到莎士比亚的名言”to be, or not to be”
- 用国家的代码,例如 挪威:no
而移除停用词带来的好处主要是性能。用fox这个词来搜索一百万的文档。可能fox这个词仅仅存在于20个文档中,这样ElasticSearch只需要计算20个文档的相关度然后排序再返回top 10. 但是如果我们搜索 the or fox。 单词 the 可能存在于几乎所有的文档,这就意味着ElasticSearch必须计算所有文档的_score(相关度)再排序。这是不可想象的。
我们有办法来解决上述描述的问题。下面来讲一下如何使用停用词。
使用停用词
停用词和标准分析器
我们只需要创建一个配置的分析器,并且把停用词输入进去就可以使用用户自定义的停用词了
PUT /my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"type": "standard",
"stopwords": [ "and", "the" ]
}
}
}
}
}
分治法
在访问字符串中,可以把字符串中的词分为两个部分,一个种是重要的词(低频词,在比较少文档出现的词),一种是不重要的词(在文档中经常出现的,例如the、a、to)。我们要的搜索结果尽量多匹配更多的重要的词。
而