我在索引编制期间使用过滤器EdgeNGramTokenFilter
。
当我在寻找一个词时。当Lucene找到一个完整的单词或另一个单词的一部分时,它的得分没有差别。
例如,如果我正在寻找PUB这个词。 我想在结果的顶部看到每个PUB,并且只看到PUBLIC这个词。
谢谢
答案 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());
当我找到一个确切的术语时,它会得分两次