[Linq]Linq to Lucene

    lucene是在JAVA中比较有名的开源项目,也有.NET移植版lucene.net,不过在apache的官方网站上还是一个孵化器项目,而且好像2007年就不更新了,现在codeplex上推出了LINQ To Lucene,真是一个好消息。
linq to lucene采用attribute的方式,非常简单方便。

C#代码
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using Lucene.Linq.Mapping;  
  6. using Lucene.Net.Analysis;  
  7. using Lucene.Linq;  
  8.   
  9. namespace LinqToLucene1  
  10. {  
  11.     [Document]  
  12.     public class Book : IIndexable, IHit  
  13.     {  
  14.         [Field(FieldIndex.Tokenized,FieldStore.Yes, IsDefault = true)]  
  15.         public string Title { getset; }  
  16.   
  17.         [Field(FieldIndex.Tokenized, FieldStore.Yes)]  
  18.         public string Author { getset; }  
  19.   
  20.         [Field(FieldIndex.Tokenized, FieldStore.Yes)]  
  21.         public string PubTime { getset; }  
  22.   
  23.         [Field(FieldIndex.Tokenized, FieldStore.Yes)]  
  24.         public string Publisher { getset; }  
  25.  
  26.         #region IHit Members  
  27.   
  28.         public int DocumentId { getset; }  
  29.   
  30.         public float Relevance { getset; }  
  31.          
  32.         #endregion  
  33.     }  
  34. }  

然后就可以用linq的方式查询了,真是方便啊

C#代码
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using Lucene.Net.Documents;  
  6. using Lucene.Linq.Mapping;  
  7. using Lucene.Linq;  
  8. using Lucene.Net.Analysis;  
  9.   
  10. namespace LinqToLucene1  
  11. {  
  12.     public class Program  
  13.     {  
  14.         static void Main(string[] args)  
  15.         {  
  16.             IIndex<Book> bookIndex = new Index<Book>();  
  17.             bookIndex.Add(new Book()  
  18.             {  
  19.                 Title = "谁都逃不掉的金融危机",  
  20.                 Author = "xxx",  
  21.                 Publisher = "东方出版社",  
  22.                 PubTime = "2008年12月"  
  23.             });  
  24.             bookIndex.Add(new Book()  
  25.             {  
  26.                 Title = "许我向你看(“暖伤青春代言人” 辛夷坞《致我们终将逝去的青春》完美续作)",  
  27.                 Author = "辛夷坞",  
  28.                 Publisher = "河南文艺出版社",  
  29.                 PubTime = "2008年12月"  
  30.             });  
  31.             bookIndex.Add(new Book()  
  32.             {  
  33.                 Title = "大猫儿的TT奋斗史(都市小白领的爆雷囧事录)",  
  34.                 Author = "阿巳",  
  35.                 Publisher = "国际文化出版公司",  
  36.                 PubTime = "2008年12月"  
  37.             });  
  38.             bookIndex.Add(new Book()  
  39.             {  
  40.                 Title = "佳期如梦之海上繁花(匪我思存最新作品上市)",  
  41.                 Author = "匪我思存",  
  42.                 Publisher = "新世界出版社",  
  43.                 PubTime = "2008年12月"  
  44.             });  
  45.   
  46.             var result = from book in bookIndex  
  47.                          where book.Author == "xxx"  
  48.                          select book;  
  49.   
  50.             foreach (Book book in result)  
  51.             {  
  52.                 System.Console.WriteLine(book.Title);  
  53.             }  
  54.   
  55.             System.Console.ReadLine();  
  56.         }  
  57.     }  
  58. }  

不过有个bug,如果写成from Book book in bookIndex 的话,就会报异常。

引用
一个未找到类型 “Lucene.Linq.Expressions.Query`1[[LinqToLucene1.Book, LinqToLucene1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]”上的构造函数。
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏