Java 没有为使用Lucene 4.1的CharMappingFilter的分析器获取匹配项
只是将代码库从Lucene 3.6更新到Lucene 4.1,似乎我使用NormalizeCharMap替换分析器中的字符的测试不起作用 下面我创建了一个独立的测试用例,这是我运行它时的输出Java 没有为使用Lucene 4.1的CharMappingFilter的分析器获取匹配项,java,search,lucene,Java,Search,Lucene,只是将代码库从Lucene 3.6更新到Lucene 4.1,似乎我使用NormalizeCharMap替换分析器中的字符的测试不起作用 下面我创建了一个独立的测试用例,这是我运行它时的输出 --term=and-- --term=gold-- --term=platinum-- name:"platinum and gold" Size1 name:"platinum & gold" Size0 java.lang.AssertionError: Expected :1 Actua
--term=and--
--term=gold--
--term=platinum--
name:"platinum and gold"
Size1
name:"platinum & gold"
Size0
java.lang.AssertionError:
Expected :1
Actual :0
<Click to see difference>
at org.junit.Assert.fail(Assert.java:93)
at org.junit.Assert.failNotEquals(Assert.java:647)
at org.junit.Assert.assertEquals(Assert.java:128)
at org.junit.Assert.assertEquals(Assert.java:472)
at org.junit.Assert.assertEquals(Assert.java:456)
at org.musicbrainz.search.analysis.Lucene41CharFilterTest.
testAmpersandSearching(Lucene41CharFilterTest.java:89)
不太确定,但我想询问者做的不仅仅是分析……”“例如”是一个特殊的关键字。您可能遇到了一个有趣的边缘情况:)
4.1中还有更多的QueryParser实现。。。例如,请参见我发现了一个问题,我必须重写新的initReader()方法,以便在analyzer与QueryParser一起使用时应用它。不确定是否也需要在createComponents()中构造过滤器,但如果我只添加到initReader,则测试是否有效
class SimpleAnalyzer extends Analyzer {
protected NormalizeCharMap charConvertMap;
protected void setCharConvertMap() {
NormalizeCharMap.Builder builder = new NormalizeCharMap.Builder();
builder.add("&","and");
charConvertMap = builder.build();
}
public SimpleAnalyzer() {
setCharConvertMap();
}
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new MusicbrainzTokenizer(Version.LUCENE_35,
reader);
TokenStream filter = new LowerCaseFilter(Version.LUCENE_35,source);
return new TokenStreamComponents(source, filter);
}
@Override
protected Reader initReader(String fieldName,
Reader reader)
{
return new MappingCharFilter(charConvertMap, reader);
}
}
Thx,但我只是尝试从Lucene 3.6更新到Lucene.4.1,而不重写大部分代码。
class SimpleAnalyzer extends Analyzer {
protected NormalizeCharMap charConvertMap;
protected void setCharConvertMap() {
NormalizeCharMap.Builder builder = new NormalizeCharMap.Builder();
builder.add("&","and");
charConvertMap = builder.build();
}
public SimpleAnalyzer() {
setCharConvertMap();
}
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new MusicbrainzTokenizer(Version.LUCENE_35,
reader);
TokenStream filter = new LowerCaseFilter(Version.LUCENE_35,source);
return new TokenStreamComponents(source, filter);
}
@Override
protected Reader initReader(String fieldName,
Reader reader)
{
return new MappingCharFilter(charConvertMap, reader);
}
}