0

我有一个自定义令牌过滤器设置来解析关键字,例如

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;

    }

但是,这不会删除逗号

关于如何完成这项工作的任何帮助?

谢谢

4

1 回答 1

1

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

令牌的文本值与令牌 TermAttribute.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");

        }

....

让我知道它是否有效..

于 2013-02-28T21:28:17.977 回答