1、索引的建立
1.1把索引建立在内存中
Directory directory=new RAMDirectory();
1.2把索引建立在磁盘中
Directory directory=new FSDirectory.GetDirectory(@"D:\project\index", false);
//para0:索引建立的路径
//para1:ture表示若索引已经存在,则删除重新建立;false表示索引不存在则建立,若存在则不建立;
1.3从磁盘上或者数据库中读取内容建立索引结构
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);//分词器,也可以选用其他的分析器
IndexWriter iwriter = new IndexWriter(directory, analyzer, true, new IndexWriter.MaxFieldLength(25000));//四个参数都比较固定
Document doc = new Document();//一个doc概念上相等于一条记录,会含有一些属性字段来表示各个与之相关的数据
doc.add(new Field("fieldname","fieldContent",Field.Store.YES,Field.Index.ANALYZED));
//para0:表示在属性字段的名称
//para1:表示属性字段的相对应的值,其来源可能是数据库中的值,也可能是来源于一个txt文件中的值。
//para2:表示是否存储
//para3:表示是否拆分建立索引
para2和 para3的四种组合,TT表示既存储有索引,一般适合于title等内容比较小。TF表示只存储不索引,一般是用来排序用的。FT表示只索引不存储,一般适合于content等内容较大,但比较重要,希望建立索引的字段。
iwriter.AddDocument(doc);//把doc加入到索引中。
2、如何搜索
2.1 搜索器的建立
IndexSearcher isearcher = new IndexSearcher(directory, true); // read-only=true
2.2 query的构造和相关语法
2.2.1最简单的query
QueryParser parser=new QueryParser("content",analyzer);
Query query=parser.Parse(key);//key:string,使用户输入的想要查询的关键词
//para0为属性字段,表示要去那个字段里去查询
// para1为分析器,为建立索引的分析器一样即可。
2.2.2 搜索的结果
Hits hits=isearcher.Search(query);
//SortField[] sortOrder={newSortField("time",true),new SortField("fans",SortField.LONG,true)};//true表示降序
//Sort sort=new Sort(sortOrder);
//Hits hits=isearcher.Seach(query,sort);
//Hits hits=iseacher.Search(query,Sort.RELEVANCE);//按照相关度排序
for (int i = 0; i < hits.Length(); i++)
{
Document hitDoc = hits.Doc(i);//找到命中的文档
Console.Write(hitDoc.Get("name") + " " + hitDoc.Get("fans") + " " + hitDoc.Get("gender") + " " + hitDoc.Get("time"));
Console.WriteLine(hitDoc.Get("content"));
}