查找lucene索引的所有文档中的一个文档的术语

时间:2014-10-06 15:26:08

标签: lucene lucene.net

我有一个带有大量文档的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));

如何列出一个文档的所有条款?

1 个答案:

答案 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]);
 }

我获得了我的文件的条款清单