gpt4 book ai didi

lucene - 从 Lucene 查询中获取匹配的术语

转载 作者:行者123 更新时间:2023-11-29 08:48:51 24 4
gpt4 key购买 nike

给定 Lucene 搜索查询,例如:+(letter:A letter:B letter:C) +(style:Capital),我如何判断这三个字母中的哪一个实际上与任何给定文档匹配?我不关心他们在哪里匹配,或者他们匹配了多少次,我只需要知道他们是否匹配。

目的是对初始查询(“A B C”),去除成功匹配的词(A和B),然后对余数(C)做进一步处理。

最佳答案

虽然示例是在 c# 中,但 Lucene API 非常相似(一些大小写差异)。我认为翻译成 Java 并不难。

这是用法

List<Term> terms = new List<Term>();    //will be filled with non-matched terms
List<Term> hitTerms = new List<Term>(); //will be filled with matched terms
GetHitTerms(query, searcher,docId, hitTerms,terms);

这是方法

void GetHitTerms(Query query,IndexSearcher searcher,int docId,List<Term> hitTerms,List<Term>rest)
{
if (query is TermQuery)
{
if (searcher.Explain(query, docId).IsMatch() == true)
hitTerms.Add((query as TermQuery).GetTerm());
else
rest.Add((query as TermQuery).GetTerm());
return;
}

if (query is BooleanQuery)
{
BooleanClause[] clauses = (query as BooleanQuery).GetClauses();
if (clauses == null) return;

foreach (BooleanClause bc in clauses)
{
GetHitTerms(bc.GetQuery(), searcher, docId,hitTerms,rest);
}
return;
}

if (query is MultiTermQuery)
{
if (!(query is FuzzyQuery)) //FuzzQuery doesn't support SetRewriteMethod
(query as MultiTermQuery).SetRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);

GetHitTerms(query.Rewrite(searcher.GetIndexReader()), searcher, docId,hitTerms,rest);
}
}

关于lucene - 从 Lucene 查询中获取匹配的术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23740989/

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