2 ohyesurright ohyesurright 于 2014.08.26 09:35 提问

lucene做同义词练习,关于restoreState的疑问。

比如一句话有我,
他的同义词是咱、俺。

网上的代码一般是
循环遍历执行incrementToken,然后每次添加一个同义词
比如:
// 如果有同义词
if (sames.size() > 0) {
// 将元素出栈,并且获取这个同义词
String str = sames.pop();
// 还原状态
restoreState(current);
cta.setEmpty();
cta.append(str);
// 设置位置0
pia.setPositionIncrement(0);

        return true;
    }

为什么不能是,如果有同义词,一次全部取出来:这样的执行结果是,只有最后一个同义词。
if (sames.size() > 0) {
while (sames.size() > 0) {

            // 将元素出栈,并且获取这个同义词

            String str = sames.pop();

            // 还原状态

            restoreState(current);

            cta.setEmpty();

            cta.append(str);

            // 设置位置0

            pia.setPositionIncrement(0);
        }

        return true;
    }

这是为什么啊?

1个回答

zlgkaixin68
zlgkaixin68   2014.12.28 21:01
  1. 如果是做同义词练习,在增加同义词时,应该用的是 cta.copyBuffer(). 当然了这跟这次提问无关。
  2. while循环里做的工作,明显后覆盖上一次循环的结果。所以最终只是添加了最后一次添加的同义词。所以要想不被覆盖,就得添加后return。
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!