如何在Lucene.net中使用自定义TokenFilter从令牌中删除逗号

本文关键字:TokenFilter 令牌 删除 自定义 Lucene net | 更新日期: 2023-09-27 18:01:22

我有一个自定义的标记过滤器设置来解析关键字,如

oracle,java,sybase,vb.net etc. 

oracle java sybase vb.net

并且工作正常,但是其中一个测试文档有以下文本

,oracle java,sybase,unix

,我正试图从

中删除前导逗号
,oracle

使用

下面的代码
    public override bool IncrementToken()
    {
        if (!input.IncrementToken())
            return false;

        char[] buffer = termAtt.TermBuffer();
        int bufferLength = termAtt.TermLength();
...
        else if (bufferLength > 1 && buffer[0] == ',')
        {
            // strip the starting , off !
            offsetAtt.SetOffset(offsetAtt.StartOffset + 1, offsetAtt.EndOffset);
        // where offsetAtt = AddAttribute<IOffsetAttribute>();
        }
        ...
        return true;
    }

但是这并没有去掉逗号

有什么帮助吗?

谢谢

如何在Lucene.net中使用自定义TokenFilter从令牌中删除逗号

Lucene中的令牌基于属性工作,即令牌的每个属性(如文本值,偏移量等)都是一个属性。

令牌的文本值与令牌termatattribute .class相关联。

一旦你改变了偏移量和其他属性,你可能还必须改变它本身的文本,可能使用下面的代码片段。

private final TermAttribute termAtt; // instance variable
termAtt = addAttribute(TermAttribute.class); // initialization in constructor 
....

 else if (bufferLength > 1 && buffer[0] == ',')
        {
            // strip the starting , off !
            offsetAtt.SetOffset(offsetAtt.StartOffset + 1, offsetAtt.EndOffset);
        // update the termAtt
            termAtt.setTermBuffer("sub-content of the buffer");
        }
....