Lucene 摘录

View Code
   /// <summary>
/// 创建索引库
/// </summary>
public string CreateIndexLib()
{
string strJson = "";
IndexWriter indexWriter = null;
try
{
Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);//创建一个索引分析器,使用当前版本
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(SearchEngine.m_indexLibFilePath);
indexWriter = new IndexWriter(FSDirectory.Open(di), analyzer, true, new IndexWriter.MaxFieldLength(1000000));

string strSQL = "select t.doc_volume_id,t.doc_title,t.archive_date_time,t.task_id,t.archive_class,t.archive_no from ubt_archive_info t";
DbHelperOra.SetConnectionType(OraDbConnType.CCLAND_DB);
DataTable dt = DbHelperOra.Query(strSQL).Tables[0];

if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
int i = 0;
try
{
//将每一行数据库记录,在索引目录中创建一条对应的记录
Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
for (i = 0; i < dt.Columns.Count; i++)
{
doc.Add(new Field(dt.Columns[i].Caption, dr[i].ToString(), Field.Store.YES, Field.Index.ANALYZED));
}
indexWriter.AddDocument(doc);
}
catch (Exception ex)
{

}
}
}
indexWriter.Optimize();
indexWriter.Close();
strJson = "{success:true}";
}
catch (Exception ex)
{
indexWriter.Close();
strJson = "{success:false,error:'" + Newtonsoft.Json.JsonConvert.SerializeObject(ex.Message) + "'}";
}
return strJson;
}
/// <summary>
/// 将记录追加到存在的索引库
///<param name="strwhere">查询条件</param>
/// </summary>
public bool AppendIndexToLib(string strwhere)
{
bool success = false;
IndexWriter indexWriter = null;
try
{
Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);//创建一个索引分析器,使用当前版本
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(SearchEngine.m_indexLibFilePath);
indexWriter = new IndexWriter(FSDirectory.Open(di), analyzer, false, new IndexWriter.MaxFieldLength(1000000));

string strSQL = "select t.doc_volume_id,t.doc_title,t.archive_date_time,t.task_id,t.archive_class,t.archive_no from ubt_archive_info t" + strwhere;
DbHelperOra.SetConnectionType(OraDbConnType.CCLAND_DB);
DataTable dt = DbHelperOra.Query(strSQL).Tables[0];

if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
int i = 0;
//将每一行数据库记录,在索引目录中创建一条对应的记录
Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document();
for (i = 0; i < dt.Columns.Count; i++)
{
doc.Add(new Field(dt.Columns[i].Caption, dr[i].ToString(), Field.Store.YES, Field.Index.ANALYZED));
}
indexWriter.AddDocument(doc);
}
}
indexWriter.Optimize();
indexWriter.Close();
success = true;
}
catch (Exception ex)
{
indexWriter.Close();
success = false;
}
return success;
}
/// <summary>
/// 搜索并分页
/// </summary>
/// <param name="keys">搜索关键字</param>
/// <param name="pageSize">分页大小</param>
/// <param name="currentPage">当前页</param>
/// <returns>返回查询结果,JSON格式</returns>
public string Search(string strKeys,int pageSize,int currentPage)
{
StringBuilder sb = new StringBuilder();
try
{
if (pageSize == 0)
{
pageSize = 20;
}
if (currentPage == 0)
{
currentPage = 1;
}
if (strKeys.Trim().Equals(""))
{
sb.Append("{sucess:false,data:[],totalRecord:0,totalPage:0}");
}
else
{
//搜索多字段
string[] qFields = { "DOC_TITLE", "DOC_VOLUME_ID", "ARCHIVE_DATE_TIME", "TASK_ID", "ARCHIVE_CLASS", "ARCHIVE_NO" };
//string[] qFields = { "DOC_TITLE" };

Analyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29);//创建一个索引分析器,使用当前版本

MultiFieldQueryParser parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_29, qFields, analyzer);

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(SearchEngine.m_indexLibFilePath);
Lucene.Net.Store.Directory d = FSDirectory.Open(di);
IndexReader reader = IndexReader.Open(d, true);
IndexSearcher searcher = new IndexSearcher(reader);

Query query = parser.Parse(strKeys.ToUpper().Trim());

Hits hits = (Hits)searcher.Search(query);

sb.Append("{success:true,data:[");
int k = pageSize;
int startRecord = pageSize * (currentPage - 1);//当前页
int totalPage = hits.Length() / pageSize;
if (hits.Length() % pageSize > 0)
{
totalPage++;
}
for (int i = startRecord; i < hits.Length(); i++)
{
k--;
Lucene.Net.Documents.Document hitDoc = hits.Doc(i);
int j = 0;
sb.Append("{");
for (j = 0; j < qFields.Length; j++)
{
sb.Append(qFields[j] + ":'" + hitDoc.Get(qFields[j]) + "'");
if (j < qFields.Length - 1)
{
sb.Append(",");
}
}
sb.Append("}");
if (k == 0)
{
break;
}
if (i < hits.Length() - 1)
{
sb.Append(",");
}
}
sb.Append("],totalRecord:" + hits.Length().ToString() + ",totalPage:" + totalPage.ToString());
sb.Append("}");
searcher.Close();
}
}
catch (Exception ex)
{
sb.Append("{sucess:false,data:[],totalRecord:0,totalPage:0,error:'" + Newtonsoft.Json.JsonConvert.SerializeObject(ex.Message) + "'}");
}
return sb.ToString();
}
}

转载于:https://www.cnblogs.com/ndljava/archive/2011/12/12/2284934.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值