Lucene.net-如何从每个匹配中提取文本的小片段
本文关键字:提取 取文本 片段 net- Lucene | 更新日期: 2023-09-27 18:27:04
http://quranx.com/Search?q=oh+人+之+天&context=古兰经
有人能告诉我如何更改以下代码,以显示每个匹配结果的文本片段吗?我试着阅读了一些例子等,但只能找到新版本的Lucene for Java的相关信息。Lucene对我来说似乎是一个神奇的黑匣子
public static IEnumerable<SearchResult> Search(
string queryString,
out int totalResults,
int maxResults = 100)
{
totalResults = 0;
if (string.IsNullOrEmpty(queryString))
return new List<SearchResult>();
var query = new MultiFieldQueryParser(
Lucene.Net.Util.Version.LUCENE_30,
new string[] { "Body", "SecondaryReferences" },
Analyzer
).Parse(queryString);
var indexReader = DirectoryReader.Open(
directory: Index,
readOnly: true);
var indexSearcher = new IndexSearcher(indexReader);
var resultsCollector = TopScoreDocCollector.Create(
numHits: maxResults,
docsScoredInOrder: true
);
indexSearcher.Search(
query: query,
results: resultsCollector
);
totalResults = resultsCollector.TotalHits;
var result = new List<SearchResult>();
foreach (var scoreDoc in resultsCollector.TopDocs().ScoreDocs)
{
var snippets = new List<SearchResultSnippet>();
var doc = indexSearcher.Doc(scoreDoc.Doc);
var searchResult = new SearchResult(
type: doc.Get("Type"),
id: doc.Get("ID"),
snippets: snippets
);
result.Add(searchResult);
}
return result;
}
为了能够访问匹配附近的文本,您需要在索引时存储带有位置和偏移量信息的TermVectors,然后您可以使用这些信息来检索周围的单词。
请参阅http://searchhub.org/2009/05/26/accessing-words-around-a-positional-match-in-lucene/详细说明。