2 字符过滤器(character filter):分词之前的预处理,过滤无用字符 3 令牌过滤器(token filter):停用词、时态转换、大小写转换、同义词转换、语气词处理等。比如:has=>have him=>he apples=>apple the/oh/a=>干掉 4 分词器(tokenizer):切词 5 常见分词器: 6 自定义分词器:custom analyzer 7 中文分词器:ik...
方案二:N-gram 分词生产环境我们可以使用 N-gram 来代替 wildcard 实现模糊搜索功能,N-gram 分词器可以通过指定分词步长来对输入文本进行约束切割,本质上也是一种全文搜索。在使用过程中我们可以通过自定义分析器,在创建索引或者更新字段类型时,对它配置使用N-gram进行分词,简单且高效。我们可以看看分词效果:...
1.1 分析器的组成 ① 字符过滤器(character filter): 比如去除HTML标签、把&替换为and等. ② 分词器(tokenizer): 按照某种规律, 如根据空格、逗号等, 将文本块进行分解. ③ 标记过滤器(token filter): 所有被分词器分解的词都将经过token filters的处理, 它可以修改词(如小写化处理)、去掉词(根据某一规则去掉...
Ngram分词器类似于standard分词器,他可以指定分词的长度,然后用standard的方法切割。比如说“节日快乐”,我们指定切割的长度为2,NGram会切成“节日”,“日快”,“快乐”。虽然查找时可以减少每个token对应的文档数,但是存储量会增大很多,而且不在支持模糊的match匹配。很土。 求解过程 ik_max_word构建索引,ik_smart...
(一)简单的使用分词器 ES给我们提供了一个测试分词的API接口,方便验证分词效果,在这个API中我们可以指定使用的分词器和索引来源,还可以使用自定义的分词器进行查看。 POST _analyze { "analyzer": "standard", "text": [ "hello es" ] } 执行后结果如下: ...
可能是因为ngram_tokenizer会将搜索词切分成多个词,然后组合成一个短语进行搜索。在这种情况下,test_push会被切分成test和push两个词,然后组合成test_push这个短语进行搜索。如果短语中不包含-,则无法匹配到结果。 为了解决这个问题,可以考虑使用其他分词器,如standard_tokenizer或whitespace_tokenizer,或者修改搜索条件,...
Ngram分词器类似于standard分词器,他可以指定分词的长度,然后用standard的方法切割。比如说“节日快乐”,我们指定切割的长度为2,NGram会切成“节日”,“日快”,“快乐”。虽然查找时可以减少每个token对应的文档数,但是存储量会增大很多,而且不在支持模糊的match匹配。很土。
2. **simple**:简单的分词器,将文本拆分为单词和标点符号,但不会拆分停用词。 3. **Whitespace**:基于空格的分词器,将文本拆分为由空格分隔的单词。 4. **LetterOrDigit**:字母或数字分词器,将文本拆分为字母和数字。 5. **NGram**:N-gram 分词器,将文本拆分为指定长度的 N-gram。 除了上述常见的分...
standard分词器大家都比较熟,针对于汉字就是一个一个分,这种肯定是可以查全的。但一个一个字分的话,每个字对应的文档集合非常多,如果数据量达到了百亿,在求交集,计算距离时,效果非常差。Ngram分词器类似于standard分词器,他可以指定分词的长度,然后用standard的方法切割。比如说“节日快乐”,...
分词器选型后,都会有动态词典的更新问题。更新的前提是不要仅使用开源插件原生词典,而是要在平时业务中自己多积累特定业务数据词典、词库。 如果要动态更新:一般推荐第三方更新插件借助数据库更新实现。如果普通分词都不能满足业务需要,可以考虑 ngram 自定义分词方式实现更细粒度分词。