我对Lucene来说比较新,并且玩最新版本的6.4.0。
我写过一个用于做同义词的cutom分析器类,
public class MySynonymAnalyzer extends Analyzer {
@Override
protected TokenStreamComponents createComponents(String fieldName) {
Tokenizer source = new ClassicTokenizer();
TokenStream filter = new StandardFilter(source);
filter = new LowerCaseFilter(filter);
filter = new SynonymGraphFilter(filter, getSynonymsMap(), false);
filter = new FlattenGraphFilter(filter);
return new TokenStreamComponents(source, filter);
}
private SynonymMap getSynonymsMap() {
try {
SynonymMap.Builder builder = new SynonymMap.Builder(true);
builder.add(new CharsRef("work"), new CharsRef("labor"), true);
builder.add(new CharsRef("work"), new CharsRef("effort"), true);
SynonymMap mySynonymMap = builder.build();
return mySynonymMap;
} catch (Exception ex) {
return null;
}
}
在我调用getSynonymsMap()
的行中,我得到以下异常:
线程“main”中的异常java.lang.NoSuchMethodError:org.apache.lucene.util.UnicodeUtil.UTF16toUTF8WithHash([CIILorg / apache / lucene / util / BytesRef;)I at org.apache.lucene.analysis.synonym.SynonymMap $ Builder.add(SynonymMap.java:192) at org.apache.lucene.analysis.synonym.SynonymMap $ Builder.add(SynonymMap.java:239) at m2_lab4.MySynonymAnalyzer.getSynonymsMap(MySynonymAnalyzer.java:37) at m2_lab4.MySynonymAnalyzer.createComponents(MySynonymAnalyzer.java:28) 在org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:162) 在org.apache.lucene.document.Field.tokenStream(Field.java:568)
版本6.4.0似乎在类UTF16toUTF8WithHash
中没有方法UnicodeUtil
。我正在使用lucene 6.4.0中的所有内容,并且在我的类路径中似乎没有任何旧的版本化jar。这就是我的maven dependendies的样子:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<lucene.version>6.4.0</lucene.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queries</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers</artifactId>
<version>3.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-facet</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-spatial</artifactId>
<version>${lucene.version}</version>
</dependency>
<dependency>
<groupId>com.spatial4j</groupId>
<artifactId>spatial4j</artifactId>
<version>0.4.1</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
知道发生了什么事吗?我特别对异常描述中的[CIILorg/apache/lucene/util/BytesRef
文本感到困惑。