Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有为使用Lucene 4.1的CharMappingFilter的分析器获取匹配项_Java_Search_Lucene - Fatal编程技术网

Java 没有为使用Lucene 4.1的CharMappingFilter的分析器获取匹配项

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

只是将代码库从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
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);
        }
    }