如何在lucene 6.2.0中使用Synonymap

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在lucene 6.2.0中使用Synonymap相关的知识,希望对你有一定的参考价值。

我正在使用apache Lucene 6.2.0,我正在尝试实现自定义分析器进行搜索。这是我的分析器类

        public static class  myAnalyzer extends Analyzer
{
    @Override
    protected TokenStreamComponents createComponents(String reader) {
        final StandardTokenizer tok = new StandardTokenizer();

        TokenStream result = new StandardFilter((TokenStream) tok);
        result = new LowerCaseFilter(result);
        return new TokenStreamComponents(tok, result); 

}
}

现在,当我搜索索引时,它正在给我这样的非法状态异常。

Exception in thread "main" java.lang.IllegalStateException: TokenStream contract violation: reset()/close() call missing, reset() called multiple times, or subclass does not call super.reset(). Please see Javadocs of TokenStream class for more information about the correct consuming workflow.
at org.apache.lucene.analysis.Tokenizer$1.read(Tokenizer.java:109)

i tried using result.close(); but it didnt solved the problem..
so what am i doing wrong ? am I using two instances of the same analyzer.

任何代码示例都非常有用。

答案

createComponents不再使用Reader参数,因此不会调用该方法。实际调用的方法实际上是覆盖Analyzer中的方法,在您的实现中,它只是一个返回null的存根。

所以删除createComponents(string, Reader),并将你的代码放在createComponents(string)中(当然,删除对Tokenizer.setReader的调用)。

以上是关于如何在lucene 6.2.0中使用Synonymap的主要内容,如果未能解决你的问题,请参考以下文章

在 sqlite 查询中如何获取具有所需值的特定行和列

[Oracle]同义词(synonym)

SQLServer中同义词Synonym的用法

Elastic认证特训营 难点解读03——Analysis 中的同义词filter(synonym)如何解读?

同义词Synonym

sp_addlinkedserver,Synonym