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

Eel*_*Fan 6 c# lucene.net

我正在开发一个依赖Lucene.NET的项目.到目前为止,我有一个具有简单名称/值属性的类(如int ID {get; set;}).但是,我现在需要在索引中添加一个新属性.该属性是一种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); 
}
Run Code Online (Sandbox Code Playgroud)

现在,MyResult有一个表示List的属性.我如何把它放在我的索引中?我需要将它添加到我的索引的原因是我可以稍后将其取回.

Omr*_*mri 7

您可以将列表中的每个值添加为具有相同名称的新字段(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);
}
Run Code Online (Sandbox Code Playgroud)

以下是从搜索结果中提取值的方法:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1,最好的方法.但是该字段应该使用Field.Index.NO创建,因为asker指定它不需要是可搜索的. (2认同)