想写BLOG,又不知道写些什么(只是最近刚想是不是该写个自已的BLOG)。于是乎,把以前曾经在项目中用到的一个东东写上了,个人愚见:).
使用LUCENE时,搜索'c++'这样的词会出现空的结果.原因肯定是在创建索引时出了问题,创建索引就需要分词,你没搜到'C++',就是因为没有c++这样一个分词加到索引中.
说完就开工,我仿照英文的分词方式,每个字母做一个分词,也就是'c++'被分成'c' '+' '+'三个,然后加在索引中.
使用LUCENE时,搜索'c++'这样的词会出现空的结果.原因肯定是在创建索引时出了问题,创建索引就需要分词,你没搜到'C++',就是因为没有c++这样一个分词加到索引中.
说完就开工,我仿照英文的分词方式,每个字母做一个分词,也就是'c++'被分成'c' '+' '+'三个,然后加在索引中.
public
sealed
class
ChineseTokenizer : Tokenizer
{
public ChineseTokenizer(TextReader _in)
{
input = _in;
}
private int offset = 0;//偏移量
private int bufferIndex = 0;////词汇在缓冲中的位置
private int dataLen = 0;//缓冲字符的长度
private static int MAX_WORD_LEN = 255;
private static int IO_BUFFER_SIZE = 1024;
private char[] buffer = new char[MAX_WORD_LEN];
private char[] ioBuffer = new char[IO_BUFFER_SIZE];
private int length;//词汇的长度
private int start;//开始偏移量.
private void Push(char c)
{
if (length == 0) start = offset - 1; // 分词起始位置
buffer[length++] = Char.ToLower(c); // 加入缓冲区
{
public ChineseTokenizer(TextReader _in)
{
input = _in;
}
private int offset = 0;//偏移量
private int bufferIndex = 0;////词汇在缓冲中的位置
private int dataLen = 0;//缓冲字符的长度
private static int MAX_WORD_LEN = 255;
private static int IO_BUFFER_SIZE = 1024;
private char[] buffer = new char[MAX_WORD_LEN];
private char[] ioBuffer = new char[IO_BUFFER_SIZE];
private int length;//词汇的长度
private int start;//开始偏移量.
private void Push(char c)
{
if (length == 0) start = offset - 1; // 分词起始位置
buffer[length++] = Char.ToLower(c); // 加入缓冲区