我有一个带有大量文档的lucene索引。
现在,我使用以下代码显示所有文档路径的列表:
public List<Verbatim> GetAllPath(string indexFolder)
{
FSDirectory directory = FSDirectory.Open(indexFolder);
List<string> pathlist = new List<Verbatim>();
IndexReader reader = IndexReader.Open(directory, true);
for (int i = 0; i < reader.NumDocs(); i++)
{
if (reader.IsDeleted(i))
continue;
Document doc = reader.Document(i);
pathlist.Add(doc.GetFields("path"));
}
reader.Dispose();
return termlist;
}
但现在我必须列出列出的文件的条款。该术语位于“文本”字段中。我尝试使用此代码来创建此列表,但似乎不可能这样。
我的字段定义如下:
doc.Add(new Field("date", DateTime.Now.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("path", path, Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add(new Field("title", System.Web.HttpUtility.HtmlDecode(title), Field.Store.YES, Field.Index.ANALYZED));
doc.Add(new Field("text", ParseHtml(text, false), Field.Store.YES, Field.Index.ANALYZED));
如何列出一个文档的所有条款?
答案 0 :(得分:0)
我在字段定义中添加了Field.TermVector.YES,如下所示:
doc.Add(new Field("text", ParseHtml(text, true), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));
使用这个新选项,我可以使用此代码:
doc.LuceneTerms = new List<LuceneTerm>();
var termFreq = reader.GetTermFreqVector(docId, "text");
list<string> terms = new list<string>();
for (int i = 0; i < termFreq.GetTerms().Length; i++ )
{
terms .Add(termFreq.GetTerms()[i]);
}
我获得了我的文件的条款清单