0
我一直在嘗試在Lucene中實現自定義分析器。我認爲我非常接近完成,但我面臨兩個奇怪的問題。Lucene的incrementToken()上一項被忽略
首先,除了最後一個,我的過濾器對令牌流中的每個術語都按預期工作。 (雖然我正在努力處理它)。
其次,我不會有使用該TokenFilter的問題(甚至錯過了上一屆)。但是,雖然索引工作正常(使用Luke檢查結果索引),但當我嘗試使用我的分析器解析用戶查詢時=生成的查詢爲空(!)這是否可能是由於缺少的術語?
我已經發布了以下過濾器的incrementToken()方法。任何幫助將非常受歡迎。先謝謝你。
P.S.我現在從貢獻的角度來看,這個問題並不好,但我找不到其他地方的具體內容。
public boolean incrementToken() throws IOException {
if (!input.incrementToken()) {
if (previousTokenFlag) {
tempPreviousToken.attSource.copyTo(this);
previousTokenFlag = false;
this.incrementToken();
return false;
} else {
return false;
}
}
if (previousTokenFlag) {
if (CheckIfMainName(this.termAtt.term())) {
if (CheckIfMainName(tempPreviousToken.termAtt.term())) {
termAtt.setTermBuffer(tempPreviousToken.termAtt.term() +
TOKEN_SEPARATOR + this.termAtt.term());
this.setPreviousTokenFlag(false);
return true;
} else {
tempHelpingToken = new TempToken(this.input.cloneAttributes());
}
tempPreviousToken.attSource.copyTo(this);
tempHelpingToken.attSource.copyTo(tempPreviousToken.attSource);
return true;
} else {
if (CheckIfMainName(tempPreviousToken.termAtt.term())) {
tempHelpingToken = new TempToken(this.input.cloneAttributes());
tempPreviousToken.attSource.copyTo(this);
tempHelpingToken.attSource.copyTo(tempPreviousToken.attSource);
tempHelpingToken.attSource.clearAttributes();
return true;
} else {
tempHelpingToken = new TempToken(this.input.cloneAttributes());
tempPreviousToken.attSource.copyTo(this);
tempHelpingToken.attSource.copyTo(tempPreviousToken.attSource);
tempHelpingToken.attSource.clearAttributes();
return true;
}
}
} else {
tempPreviousToken = new TempToken(this.input.cloneAttributes());
tempPreviousToken.termAtt.setTermBuffer(this.termAtt.term());
this.setPreviousTokenFlag(true);
this.incrementToken();
return true;
}
}
我真的很抱歉,你是對的。另外我想我解決了它,我會在今天晚些時候發佈代碼(清理)。 – Damerian 2012-02-25 09:13:24