代码分析14"/>
Lucene代码分析14
2021SC@SDUSC
今天继续对Lucene中的Analysis进行分析
阅读的DotLucene版本是1.9.RC1
Lucene的标准分词器
1.StandardTokenizerImpl.jflex
和QueryParser类似,标准分词器也需要词法分析,在原来的版本中,也是用javacc,当前的版本中,使用的是jflex。
jflex也是一个词法及语法分析器的生成器,它主要包括三部分,由%%分隔:
- 用户代码部分:多为package或者import
- 选项及词法声明
- 语法规则声明
用于生成标准分词器的flex文件尾StandardTokenizerImpl.jflex,如下:
import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.tokenattributes.TermAttribute; %% //以上是用户代码部分,以下是选项及词法声明 %class StandardTokenizerImpl //类名 %unicode %integer //下面函数的返回值 %function getNextToken //进行词法及语法分析的函数 %pack %char %{ //此之间的代码之间拷贝到生成的java文件中 public static final int ALPHANUM = StandardTokenizer.ALPHANUM; public static final int APOSTROPHE = StandardTokenizer.APOSTROPHE; public static final int ACRONYM = StandardTokenizer.ACRONYM; public static final int COMPANY = StandardTokenizer.COMPANY; public static final int EMAIL = StandardTokenizer.EMAIL; public static final int HOST = StandardTokenizer.HOST; public static final int NUM = StandardTokenizer.NUM; public static final int CJ = StandardTokenizer.CJ; public static final int ACRONYM_DEP = StandardTokenizer.ACRONYM_DEP; public static final String [] TOKEN_TYPES = StandardTokenizer.TOKEN_TYPES; public final int yychar() { return yychar; } final void getText(Token t) { t.setTermBuffer(zzBuffer, zzStartRead, zzMarkedPos-zzStartRead); } final void getText(TermAttribu |
更多推荐
Lucene代码分析14
发布评论