Lucene EdgeNGramTokenFilter得分

时间:2013-12-06 13:10:23

标签: java filter lucene

我在索引编制期间使用过滤器EdgeNGramTokenFilter

当我在寻找一个词时。当Lucene找到一个完整的单词或另一个单词的一部分时,它的得分没有差别。

例如,如果我正在寻找PUB这个词。 我想在结果的顶部看到每个PUB,并且只看到PUBLIC这个词。

谢谢

1 个答案:

答案 0 :(得分:1)

我找到了解决方案:

我创建了两个字段,一个将被分析(edgeNgrams),一个将不是

TextField field = new TextField(FULLTEXT_COL, value, Field.Store.NO);
d.add(field);
//exact search
Field exactField = new TextField(FullTextIndexationManager.EXACT_COL + FULLTEXT_COL, value, Field.Store.NO);                    
d.add(exactField);

我使用PerFieldAnalyzerWrapper来分配分析器

Map<String, Analyzer> analyzerPerField = new HashMap<>();
analyzerPerField.put(FullTextIndexationManager.EXACT_COL + FULLTEXT_COL, new StandardAnalyzer(Version.LUCENE_44));
PerFieldAnalyzerWrapper aWrapper = new PerFieldAnalyzerWrapper(customAnalyzer, analyzerPerField);

当我在两个字段中搜索时

keys.add(FullTextIndexationManager.FULLTEXT_COL);
    values.add(QueryParser.escape(value));
    occurs.add(BooleanClause.Occur.SHOULD);
    //exact search
    keys.add(FullTextIndexationManager.EXACT_COL+FullTextIndexationManager.FULLTEXT_COL);
    values.add(QueryParser.escape(value));
    occurs.add(BooleanClause.Occur.SHOULD);
    Query q = MultiFieldQueryParser.parse(Version.LUCENE_44, queries, fields, flags, ontologySearch.getAnalyzer());

当我找到一个确切的术语时,它会得分两次