zoukankan      html  css  js  c++  java
  • lucene.net2.0 搜索

    #region 建立索引
    public void CreateIndex()
    {
    DataSet ds
    = 取得数据库信息;
    //取得索引输出
    IndexWriter writer = new IndexWriter(这个地方写保存路径, true);
    writer.SetMergeFactor(
    20); // 调整segment合并的频率和大小
    //建立索引字段
    if (ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
    {
    foreach (DataRow dr in ds.Tables[0].Rows)
    {
    //取得Doc对象
    Document doc = GetDocumentObj(文档信息写在这里,根据实际情况可以包含标题,内容,时间etc);
    //写入索引文档
    writer.AddDocument(doc);
    }
    }
    //优化文档
    writer.Optimize();
    //关闭
    writer.Close();
    }
    #endregion

    #region 更新索引
    /// <summary>
    /// 通过fileindex的fileid更新 这个地方由于2.0不像java的2.2有update方法,所以只能先删除后添加了
    /// </summary>
    /// <param name="fileID"></param>
    public void UpdateIndex(int fileID)
    {
    //这里根据ID取得信息对象IdxObj;

    if (fileIdxObj == null) //无法查询,返回
    return;

    //取得索引修改器
    IndexModifier modifier = new IndexModifier(路径, false);
    //删除原索引
    modifier.DeleteDocuments(new Term(此处根据fileid查询));
    //建立索引字段
    Document doc = GetDocumentObj(idxObj的信息);
    //写入索引文档
    modifier.AddDocument(doc);
    //优化
    modifier.Optimize();
    //关闭
    modifier.Close();
    }
    #endregion

    #region 添加索引
    public void AddIndex(信息)
    {
    //取得索引修改器
    IndexModifier modifier = new IndexModifier(路径, new StandardAnalyzer(), false);
    //建立索引字段
    Document doc = GetDocumentObj(信息);
    //写入索引文档
    modifier.AddDocument(doc);
    //优化
    modifier.Optimize();
    //关闭
    modifier.Close();

    }

    #endregion

    #region LuceneSearch
    /// <summary>
    /// 根据keyword检索数据,反回已分页的Dataset
    /// </summary>
    /// <param name="keyword">查找的关键字</param>
    /// <param name="pageSize">分页每页的大小</param>
    /// <param name="pageIndex">反回第几页的数据</param>
    /// <returns>结果数据集,Tables[0]是结果数据,Tables[1]是存放总记录数(total数据)以及总页数的表</returns>
    public DataSet LuceneSearch(string keyword, Int32 pageSize, Int32 pageIndex)
    {
    //取得表结构
    DataTable mytab = GetDataTable();
    int result = 0; //结果
    int pageCount=0; //页数
    int startPost = 0;
    DataSet ds;
    Query query;
    IndexSearcher mysea;
    //取得搜索结果
    Hits myhit = seacher(keyword,out mysea, out query);
    Highlighter hl
    = new Highlighter(new SimpleHTMLFormatter("<font class=\"Highlighter\">", "</font>"), new QueryScorer(query));

    //设置高亮检索的范围 数值大=准确度高+速度慢
    hl.SetMaxDocBytesToAnalyze(int.MaxValue);

    if (myhit != null)
    {
    result
    = myhit.Length();
    //计算分页信息
    cacuPageInfo(pageSize, ref pageIndex, result, ref pageCount, ref startPost);

    for (int i = 0; i < pageSize && startPost < result; i++, startPost++)
    {
    //添加信息
    AppendTableRow(keyword, mytab, myhit, hl, startPost);
    }
    //填充结果
    ds= FillResultDataSet(mytab, result, pageCount);
    }
    else
    {
    ds
    = null;
    }
    if(mysea!=null)
    mysea.Close();
    //关闭查询
    return ds;
    }

    /// <summary>
    /// 取得搜索信息
    /// </summary>
    /// <param name="queryString"></param>
    /// <param name="query"></param>
    /// <returns></returns>
    public Hits seacher(String queryString,out IndexSearcher mysea, out Query query )
    {
    Hits hits
    = null;
    try
    {
    mysea
    = new IndexSearcher(路径);
    QueryParser qp
    = new QueryParser(查询字段, new StandardAnalyzer());
    query
    = qp.Parse(queryString);
    hits
    = mysea.Search(query);

    }
    catch (Exception e)
    {
    query
    = null;
    mysea
    = null;
    }
    return hits;
    }
  • 相关阅读:
    java反射系七之动态代理
    java反射系列六之调用属性与方法
    java反射系列五之获取类的完整结构
    java反射系列四之创建运行时类的对象
    java反射系列三之类加载器
    java反射系列二
    java反射系列一
    数据类型
    类的加载、连接和初始化
    算法
  • 原文地址:https://www.cnblogs.com/0000/p/1531726.html
Copyright © 2011-2022 走看看