Я использую Lucene для выполнения BM25 в списке документов.
DirectoryReader indexReader = DirectoryReader.Open(directory);
IndexSearcher searcher = new IndexSearcher(indexReader);
searcher.Similarity = this.similarity;
QueryParser queryParser = new QueryParser(Lucene.Net.Util.LuceneVersion.LUCENE_48, SEARCH_FIELD, this.analyzer);
Query query = queryParser.Parse(seatch_text);
TopDocs searchResults = searcher.Search(query, null, indexReader.MaxDoc);
ScoreDoc[] scoreDocs = searchResults.ScoreDocs;
Теперь я хотел бы получить набор документов с оценкой, который содержит хотя бы одно слово из определенного списка,Так что-то вроде этого:
List<string> accepted_sentances = new List<string>();
List<string> key_words= new List<string>({ "word1", "word2"});
foreach (var doc_score in scoreDocs)
{
var doc = searcher.Doc(doc_score.Doc);
string _sentance = doc.GetField("Sentence").GetStringValue();
foreach (var word in key_words)
{
if (_sentance.Contains(word))
accepted_sentances.Add(_sentance)
}
}
Я предполагаю, что это не самый удобный и эффективный способ достижения этого.Есть ли способ сделать это с помощью запросов Lucene?