The Matches API will give you this information - it’s still likely to be fairly
slow, but it’s a lot easier to use than trying to parse Explain output.
Query q = ….;
Weight w = searcher.createWeight(searcher.rewrite(query),
ScoreMode.COMPLETE_NO_SCORES, 1.0f);
Matches m = w.matches(context, doc);
List<String> matchingFields = new ArrayList();
for (String field : m) {
matchingFields.add(field);
}
Bear in mind that `matches` doesn’t maintain any state between calls, so
calling it for every matching document is likely to be slow; for those cases
Shai’s suggestion of using a Collector and examining low-level scorers will
perform better, but it won’t work for every query type.
> On 25 Jun 2022, at 04:14, Yichen Sun <[email protected]> wrote:
>
> Hello!
>
> I’m a MSCS student from BU and learning to use Lucene. Recently I try to
> output matched fields by one query. For example, for one document, there are
> 10 fields and 2 of them match the query. I want to get the name of these
> fields.
>
> I have tried using explain() method and getting description then regex.
> However it cost so much time.
>
> I wonder what is the efficient way to get the matched fields. Would you
> please offer some help? Thank you so much!
>
> Best regards,
> Yichen Sun
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]