@Override
final public boolean incrementToken() throws IOException {
clearAttributes();
int position = 0;
Term term;
boolean unIncreased = true;
do {
term = segment.next();
if (term == null) {
break;
}
if (TextUtility.isBlank(term.word)) {
continue;
}
if (configuration.isEnablePorterStemming() && term.nature == Nature.nx) {
term.word = stemmer.stem(term.word);
}
final Term copyTerm = term;
if ((!this.configuration.isEnableStopDictionary()) || (!AccessController.doPrivileged((PrivilegedAction<Boolean>) () -> CoreStopWordDictionary.shouldRemove(copyTerm)))) {
position++;
unIncreased = false;
}
}
while (unIncreased);
4 个回复
Ombres
赞同来自: xiangxiaolu
2. 如何入手,明确特殊字符是在哪过滤的,你的分词器是Standard,我之前改过,修改的是Lucene的源码,StandardTokenizer的实现类StandardTokenizerImpl。你可以自己把这个拉出来单独做一个插件,不与原来的StandardTokenizer冲突。
以下实现是最简单的改法。
bellengao - 博客: https://www.jianshu.com/u/e0088e3e2127
赞同来自: xiangxiaolu
hapjin
赞同来自: xiangxiaolu
源码 com.hankcs.lucene.HanLPTokenizer#incrementToken 里面没有过滤掉这种特殊字符的。因此,可以搜索出来特殊字符,还能搜索出emoji字符,哈哈。。。。。
可以用下面的命令测试验证一下,如果生成了特殊的 Token,那就支持。
laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自: xiangxiaolu