Я использую SimpleLucene v1.0 и Lucene.Net v2.9.2.2 .
Я пытался изменить пример SimpleLucene на datatable, но я не смог заставить его работать.
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("name");
dt.Columns.Add("id");
DataRow row = dt.NewRow();
row["name"] = "Hi";
row["id"] = 1;
dt.Rows.Add(row);
IEnumerable<DataTable> d = new List<DataTable>() { dt };
// index location
var indexPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Index");
var indexWriter = new DirectoryIndexWriter(new DirectoryInfo(indexPath), true);
using (var indexService = new IndexService(indexWriter))
{
var result = indexService.IndexEntities(d, new ProductIndexDefinition());
Console.WriteLine("{0} products indexed in {1} milliseconds.", result.Count, result.ExecutionTime);
}
var indexSearcher = new DirectoryIndexSearcher(new DirectoryInfo(indexPath), true);
using (var searchService = new SearchService(indexSearcher))
{
var query = new ProductQuery().WithKeywords("Hi");
var result = searchService.SearchIndex(query.Query);
foreach (var doc in result.Results)
Console.WriteLine(doc.GetValues("name").First());
Console.ReadLine();
}
}
public class ProductIndexDefinition : IIndexDefinition<DataTable>
{
public Document Convert(DataTable entity)
{
var document = new Document();
document.Add(new Field("id", entity.Columns["id"].ColumnName, Field.Store.YES, Field.Index.NOT_ANALYZED));
document.Add(new Field("name", entity.Columns["name"].ColumnName, Field.Store.YES, Field.Index.ANALYZED));
return document;
}
public Term GetIndex(DataTable entity)
{
return new Term("id", entity.Columns["id"].ColumnName);
}
}
public ProductQuery WithKeywords(string keywords)
{
if (!string.IsNullOrEmpty(keywords))
{
string[] fields = { "name"};
var parser = new MultiFieldQueryParser(Version.LUCENE_29,
fields, new StandardAnalyzer(Version.LUCENE_29));
Query multiQuery = parser.Parse(keywords);
this.AddQuery(multiQuery);
}
return this;
}
Я предполагаю, что что-то все еще не сконфигурировано правильно, не получите правильные значения.