gpt4 book ai didi

java - Lucene EdgeNGramTokenFilter 评分

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:42 25 4
gpt4 key购买 nike

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

当我寻找一个词时。当 Lucene 找到完整单词或另一个单词的一部分时,它的评分不会产生差异。

例如,如果我正在查找单词 PUB。我希望在结果顶部看到每个 PUB,并且仅在 PUBLIC 一词之后。

谢谢

最佳答案

我找到了解决方案:

我创建两个字段,一个将被分析(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());

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

关于java - Lucene EdgeNGramTokenFilter 评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20424753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com