Lucene分词心得--使搜索转义字符(如'+')成为可能

本文介绍了如何在使用Lucene时解决搜索'c++'等包含转义字符的词时出现空结果的问题。通过自定义ChineseTokenizer,将每个字符作为分词,使得分词包括了特殊字符如'+'. 分析器ChineseAnalyzer也被调整以配合新的分词策略。
摘要由CSDN通过智能技术生成
    想写BLOG,又不知道写些什么(只是最近刚想是不是该写个自已的BLOG)。于是乎,把以前曾经在项目中用到的一个东东写上了,个人愚见:).
    使用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);  // 加入缓冲区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值