[英]BaseTokenFilterFactory not found by Solr with custom filter
[英]Custom filter not working with solr
我為solr 4.2創建了一個自定義過濾器工廠。 運行良好。 但是,當我嘗試將solr-4.2升級到4.7版本時,它報告了錯誤:
引起原因:org.apache.solr.common.SolrException:[schema.xml]分析器/過濾器的插件初始化失敗:實例化類時出錯:'org.apache.lucene.analysis.ExtendedNameFilterFactory'
這是工廠的Java代碼:
package org.apache.lucene.analysis;
import java.util.Map;
import org.apache.lucene.analysis.util.AbstractAnalysisFactory;
import org.apache.lucene.analysis.util.MultiTermAwareComponent;
import org.apache.lucene.analysis.util.TokenFilterFactory;
public class ExtendedNameFilterFactory extends TokenFilterFactory
implements MultiTermAwareComponent
{
int extendedWordCount;
public void init(Map<String, String> args)
{
super.init(args);
assureMatchVersion();
this.extendedWordCount = getInt("extendedWordCount", -1);
}
public ExtendedNameFilter create(TokenStream input) {
return new ExtendedNameFilter(this.luceneMatchVersion, input, this.extendedWordCount);
}
public AbstractAnalysisFactory getMultiTermComponent()
{
return this;
}
}
對於過濾器:
package org.apache.lucene.analysis;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
import org.apache.lucene.analysis.util.CharacterUtils;
import org.apache.lucene.util.Version;
public final class ExtendedNameFilter extends TokenFilter
{
private final CharTermAttribute termAtt = (CharTermAttribute)addAttribute(CharTermAttribute.class);
private PositionIncrementAttribute posIncAttr;
private OffsetAttribute setOffsetAttr;
private final int extendedWordCount;
LinkedList<String> list = new LinkedList();
ArrayList<Integer> startOffsetList = new ArrayList();
int endOffset = 0;
int count = 0;
public ExtendedNameFilter(Version matchVersion, TokenStream in, int extendedWordCount)
{
super(in);
CharacterUtils.getInstance(matchVersion);
this.extendedWordCount = extendedWordCount;
this.posIncAttr = ((PositionIncrementAttribute)addAttribute(PositionIncrementAttribute.class));
this.setOffsetAttr = ((OffsetAttribute)addAttribute(OffsetAttribute.class));
}
public final boolean incrementToken()
throws IOException
{
int len = 0;
while (this.input.incrementToken()) {
this.list.add(this.termAtt.toString());
this.startOffsetList.add(Integer.valueOf(this.setOffsetAttr.startOffset()));
this.endOffset = this.setOffsetAttr.endOffset();
}
Iterator iterator = this.list.iterator();
len = this.list.size();
if ((len > 0) && (this.extendedWordCount < 0)) {
this.termAtt.setEmpty();
while (iterator.hasNext()) {
this.termAtt.append((CharSequence)iterator.next());
}
this.list.removeFirst();
this.posIncAttr.setPositionIncrement(10);
this.setOffsetAttr.setOffset(((Integer)this.startOffsetList.get(this.count)).intValue(), this.endOffset);
this.count += 1;
return true;
}
if ((len > 0) && (this.count < this.extendedWordCount)) {
this.termAtt.setEmpty();
while (iterator.hasNext()) {
this.termAtt.append((CharSequence)iterator.next());
}
this.list.removeFirst();
this.posIncAttr.setPositionIncrement(10);
this.setOffsetAttr.setOffset(((Integer)this.startOffsetList.get(this.count)).intValue(), this.endOffset);
this.count += 1;
return true;
}
return false;
}
}
Solr 4.2運行良好。 有人可以告訴我在solr 4.7.1中運行它需要進行的更改嗎?
AbstractAnalysisFactory
不再使用init方法來傳遞args。 改寫構造函數 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.