在Lucene.NET中存储字符串列表

本文关键字:字符串 列表 存储 Lucene NET | 更新日期: 2023-09-27 18:07:25

我正在做一个依赖于Lucene.NET的项目。到目前为止,我已经有了一个类,它具有简单的名称/值属性(如int ID {get;设置;})。但是,我现在需要向索引添加一个新属性。属性是List的类型。到目前为止,我已经更新了我的索引如下…

MyResult result = GetResult();
using (IndexWriter indexWriter = Initialize())
{
  var document = new Document();
  document.Add(new Field("ID", result.ID.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZE));
  indexWriter.AddDocument(document); 
}

现在,MyResult有一个表示List的属性。我怎么把它放到索引里呢?我需要把它添加到我的索引的原因是,这样我就可以把它取出来。

在Lucene.NET中存储字符串列表

您可以将列表中的每个值添加为具有相同名称的新字段(lucene支持),然后将这些值读入字符串列表:

MyResult result = GetResult();
using (IndexWriter indexWriter = Initialize())
{
    var document = new Document();
    document.Add(new Field("ID", result.ID.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZE));
    foreach (string item in result.MyList)
    {
         document.Add(new Field("mylist", item, Field.Store.YES, Field.Index.NO));
    }
    indexWriter.AddDocument(document);
}
下面是如何从搜索结果中提取值:
MyResult result = GetResult();
result.MyList = new List<string>();
foreach (IFieldable field in doc.GetFields())
{
    if (field.Name == "ID")
    {
        result.ID = int.Parse(field.StringValue);
    }
    else if (field.Name == "myList")
    {
        result.MyList.Add(field.StringValue);
    }
}