1.添加引用dll

using Lucene.Net.Search;
using Lucene.Net.Analysis.PanGu;
using PanGu;
using PanGu.HighLight;
using Lucene.Net.Documents;
using Lucene.Net.Store;
using Lucene.Net.Index;
using Lucene.Net.QueryParsers;

2.查询代码

  /// <summary>
/// 从索引搜索结果
/// </summary>
private void SearchIndex()
{
Dictionary<string, string> dic = new Dictionary<string, string>();
BooleanQuery bQuery = new BooleanQuery();
CachingWrapperFilter filter = null;
TermQuery query2 = null;
string title = string.Empty;
string content = string.Empty;
if ((Request["title"] != null && Request["title"].ToString() != "") || !string.IsNullOrEmpty(txtTitle))
{
string searchkey = Request["title"]==null?"":Request["title"].ToString();
if(!string.IsNullOrEmpty(txtTitle)){
searchkey=txtTitle;
}
foreach (string word in GetKeyWordsSplitBySpace(searchkey))
{
query2 = new TermQuery(new Term("Title", word));
bQuery.Add(query2, BooleanClause.Occur.SHOULD);//这里设置 条件为Or关系
query2 = new TermQuery(new Term("SimpleDesc", word));
bQuery.Add(query2, BooleanClause.Occur.SHOULD);//这里设置 条件为Or关系
query2 = new TermQuery(new Term("Tags", word));
bQuery.Add(query2, BooleanClause.Occur.SHOULD);//这里设置 条件为Or关系
//query2 = new TermQuery(new Term("ContextDesc", word));
//bQuery.Add(query2, BooleanClause.Occur.SHOULD);//这里设置 条件为Or关系
}
dic.Add("Title", searchkey);
dic.Add("SimpleDesc", searchkey);
txtTitle = searchkey; if(this.hfradchecked.Value!="全部"){
//TermQuery query1 = new TermQuery(new Term("Types", this.hfradchecked.Value));
txttype = this.hfradchecked.Value;
query2 = new TermQuery(new Term("Types", this.hfradchecked.Value.ToString()));
QueryWrapperFilter oldFilter = new QueryWrapperFilter(query2);
filter = new CachingWrapperFilter(oldFilter); }
if (bQuery != null && bQuery.GetClauses().Length > )
{
GetSearchResult(bQuery, dic, filter);
}
} }
/// <summary>
/// 获取
/// </summary>
/// <param name="bQuery"></param>
private void GetSearchResult(BooleanQuery bQuery, Dictionary<string, string> dicKeywords, CachingWrapperFilter filter)
{
try
{
//IndexSearcher search = new IndexSearcher(IndexDic, true);
FSDirectory directory = FSDirectory.Open(new DirectoryInfo(IndexDic), new NoLockFactory());
IndexReader reader = IndexReader.Open(directory, true);
//IndexSearcher是进行搜索的类
IndexSearcher search = new IndexSearcher(reader);
Stopwatch stopwatch = Stopwatch.StartNew();
//SortField构造函数第三个字段true为降序,false为升序
Sort sort = new Sort(new SortField("UploadTime", SortField.DOC, true));
TopDocs docs = search.Search(bQuery, filter, PageSize * PageIndex, sort);
stopwatch.Stop();
if (docs != null && docs.totalHits > )
{
lSearchTime = stopwatch.ElapsedMilliseconds;
txtPageFoot = GetPageFoot(PageIndex, PageSize, docs.totalHits, "sabrosus");
for (int i = ; i < docs.totalHits; i++)
{
if (i >= (PageIndex - ) * PageSize && i < PageIndex * PageSize)
{
Document doc = search.Doc(docs.scoreDocs[i].doc);
ResourcesModel model = new ResourcesModel()
{
ID = doc.Get("ID").ToString(),
Title = doc.Get("Title").ToString(),
Tags = doc.Get("Tags").ToString(),
CreaetBy = doc.Get("CreaetBy").ToString(),
UploadTime = doc.Get("UploadTime").ToString(),
Types = doc.Get("Types").ToString(),
SimpleDesc = doc.Get("SimpleDesc").ToString(),
ContextDesc = doc.Get("ContextDesc").ToString()
};
list.Add(SetHighlighter(dicKeywords, model));
}
}
}
}
catch (Exception ex)
{
LogHelper.SaveLogError("",ex.ToString()); } } /// <summary>
/// 处理关键字为索引格式
/// </summary>
/// <param name="keywords"></param>
/// <returns></returns>
private string[] GetKeyWordsSplitBySpace(string keywords)
{
PanGuTokenizer ktTokenizer = new PanGuTokenizer();
StringBuilder result = new StringBuilder();
List<string> listarry = new List<string>();
ICollection<WordInfo> words = ktTokenizer.SegmentToWordInfos(keywords); foreach (WordInfo word in words)
{
if (word == null)
{
continue;
}
listarry.Add(word.Word);
}
return listarry.ToArray();
} /// <summary>
/// 设置关键字高亮
/// </summary>
/// <param name="dicKeywords">关键字列表</param>
/// <param name="model">返回的数据模型</param>
/// <returns></returns>
private ResourcesModel SetHighlighter(Dictionary<string, string> dicKeywords, ResourcesModel model)
{
SimpleHTMLFormatter simpleHTMLFormatter = new PanGu.HighLight.SimpleHTMLFormatter("<font color=\"red\">", "</font>");
Highlighter highlighter = new PanGu.HighLight.Highlighter(simpleHTMLFormatter, new Segment());
highlighter.FragmentSize = ;
string strTitle = string.Empty;
string strContent = string.Empty;
string Title = model.Title;
string SimpleDesc = model.SimpleDesc;
dicKeywords.TryGetValue("Title", out strTitle);
dicKeywords.TryGetValue("SimpleDesc", out strContent); if (!string.IsNullOrEmpty(strTitle))
{
model.Title = highlighter.GetBestFragment(strTitle, model.Title);
if (model.Title == "" || model.Title==null)
{
model.Title = Title;
}
} if (!string.IsNullOrEmpty(strContent))
{
model.SimpleDesc = highlighter.GetBestFragment(strContent, model.SimpleDesc);
if (model.SimpleDesc == "" || model.SimpleDesc == null)
{
model.SimpleDesc = SimpleDesc;
}
model.SimpleDesc = GetContextSubstring(model.SimpleDesc, );
}
return model;
}

sulin LuceneNet 搜索二的更多相关文章

  1. lintcode:搜索二维矩阵II

    题目 搜索二维矩阵 II 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没 ...

  2. lintcode :搜索二维矩阵

    题目: 搜索二维矩阵 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每行的第一个数大于上一行的最后一个整数. 样例 考虑下列矩阵: [ [1 ...

  3. 算法进阶面试题05——树形dp解决步骤、返回最大搜索二叉子树的大小、二叉树最远两节点的距离、晚会最大活跃度、手撕缓存结构LRU

    接着第四课的内容,加入部分第五课的内容,主要介绍树形dp和LRU 第一题: 给定一棵二叉树的头节点head,请返回最大搜索二叉子树的大小 二叉树的套路 统一处理逻辑:假设以每个节点为头的这棵树,他的最 ...

  4. LintCode-38.搜索二维矩阵 II

    搜索二维矩阵 II 写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每一列的整数从上到下是排序的. 在每一行或每一列中没有重复 ...

  5. LeetCode74.搜索二维矩阵

    74.搜索二维矩阵 描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 示 ...

  6. LeetCode:搜索二维矩阵【74】

    LeetCode:搜索二维矩阵[74] 题目描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的 ...

  7. Leetcode 240.搜索二维矩阵II

    搜索二维矩阵II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有 ...

  8. leetcode-240搜索二维矩阵II

    搜索二维矩阵II class Solution: def searchMatrix(self, matrix, target): """ :type matrix: Li ...

  9. Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II)

    Leetcode之二分法专题-240. 搜索二维矩阵 II(Search a 2D Matrix II) 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵 ...

随机推荐

  1. java笔试之完全数计算

    完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数. 它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身. 例如:28,它有约数1.2.4.7.14. ...

  2. Ubuntu环境下使用npm编译从git上clone下来的前端(Javascript)项目

    一.更新Ubuntu软件源 打开终端依次输入: $ sudo apt-get update $ sudo apt-get install -y python-software-properties s ...

  3. 【默默努力】ig-wxz-and-hotdog

    这个是一个非常跟热点的小游戏,思聪吃热狗.这个游戏的话,我感觉思路还挺简单的,天上会掉热狗和障碍物, 思聪在下面张开嘴巴,进行左右移动,接热狗.如果吃到的是热狗就得一分,如果思聪吃到的不是热狗,是障碍 ...

  4. vim的个性化配置(方便编程)

    在用户主目录下新建vimrc即可.例如: vim ~/.vimrc 然后复制进去即可.   配置如下: "关闭vim一致性原则 set nocompatible "显示行号 set ...

  5. 洛谷 NOIP提高组模拟赛 Day1

    传送门 ## $T1$ 一道结论题,设原来A队能力最大的是x,那么A队的选择方案就是$2^{x-1}$,B队的选择方案就是$(2^{n-x}-1)$种,因为不能不选.其中$1\leq x\leq n$ ...

  6. pytorch基础(1)

    基本数据类型和tensor import torch import numpy as np #array 和 tensor的转换 array = np.array([,]) tensorArray = ...

  7. 基于SpringBoot免费开源的微信管家平台,Jeewx-Boot 1.0.3 版本发布

    项目介绍 JeewxBoot 是一款基于SpringBoot的免费微信开发平台.支持微信公众号.小程序官网.微信抽奖活动.Jeewx-Boot实现了微信公众号管理.小程序CMS.微信抽奖活动等基础功能 ...

  8. php面向对象成员方法(函数)练习

    <?php header('content-type:text/html;charset=utf-8'); //成员方法的举例 /* ①添加sayHello 成员方法,输出 'hello' ②添 ...

  9. 报错initscripts conflicts with redhat-release-server-7.0-1.el7.x86_64

    报错 解决:删除冲突的rpm包即可 rpm -e redhat-release-server-7.0-1.el7.x86_64 --nodeps

  10. <爬虫>利用BeautifulSoup爬取百度百科虚拟人物资料存入Mysql数据库

    网页情况: 代码: import requests from requests.exceptions import RequestException from bs4 import Beautiful ...