Lucene.net常见功能实现知识汇总
在开发SearchEasy Site SearchEngine(搜易站内搜索引擎)的时候,经常会遇到一些搜索引擎的常见功能如何实现的问题,比如实现相关度百分比显示?如何实现在结果中搜索等等诸如此类常见的问题,本文总结我在开发SearchEasy Site SearchEngine(搜易站内搜索引擎)过程中遇到的问题,整理分享给需要的园友们:
问:Lucene.net的搜索结果的百分比相关度值是如何实现的?
答:
Hits result = searcher.Search(q);
float score = result.Score(n) ;//n为查询结果文挡序号,返回的是一个<=1f的float的值,表示为百分比字符串:score.ToString("0%") ;
问:如何通过编程的方式改变Lucene.net的锁文件存放的位置?
答:
Lucene.net的锁文件默认是存放系统临时文件夹,可以通过下面的语句来修改
System.Configuration.ConfigurationSettings.AppSettings.Add("Lucene.Net.lockDir", "your new lockDir") ;
通过FSDirectory.LOCK_DIR可以获得锁文件存放的位置(文件夹)
问:如何判断某个索引库被锁定,如何强制解除锁定?
答:
具体实现,可以参看Lucene.Net.Store.FSDirectory的Obtain()(判断是否锁定)方法和Release()方法(解除锁定)
备注:还有一个IsLocked方法也可以参考下。
问:如何实现多个索引的联合搜索 ?
答:
IndexSearcher[] searchers = new IndexSearcher[2];
searchers[0] = new IndexSearcher(dir1) ;
searchers[1] = new IndexSearcher(dir2) ;
MultiSearcher searcher = new MultiSearcher(searchers) ;//或ParallelMultiSearcher searcher = new ParallelMultiSearcher(searchers) ;
searcher.Search(query) ;
ParallelMultiSearcher与MultiSearcher的区别,前者为每一个索引单独开一个线程,以多线程的方式同步搜索;后者是逐个依次搜索,然后合并;
所以ParallelMultiSearcher的搜索总用时是最慢的哪个索引的搜索用时,MultiSearcher则是搜索总用时等于所有索引搜索用时之和;
问:如何实现在结果中搜索 ?
答:
*方法一,使用CachingWrapperFilter。不能实现无限级的“在结果中搜索”:
QueryParser parser = new QueryParser("content", analyzer);
Query currentQuery = parser.Parse(currentKeyword) ;
Query oldQuery = parser.Parse(oldKeyword) ;
QueryFilter oldFilter = new QueryFilter(oldQuery) ;
CachingWrapperFilter filter = new CachingWrapperFilter(oldFilter) ;
IndexSearcher searcher = new IndexSearcher(indexDir);
Hits result = searcher.Search(currentQuery, filter) ;
*方法二,将多个查询关键词做AND的BooleanQuery或者直接构造查询Sytax传给QueryParser,都可以实现无限级的“在结果中搜索“。
问:BooleanQuery.maxClauseCount的含义 ?
答:
添加到BooleanQuery的最多的Query数,默认是1024。超过该值会抛出TooManyClauses异常,可以通过BooleanQuery.SetMaxClauseCount(int)设置新的值。
备注:含义解释未明确。
问:如何判断一个索引库是否存在?
答:
string indexPath = "your indexPath" ; //索引所在目录
if (System.IO.Directory.Exists(indexPath) && System.IO.File.Exists(Path.Combine(indexPath,"segments")
//存在
else
//不存在
当然有更直接的方法
if (Lucene.Net.Index.IndexReader.IndexExists(indexPath))
//存在
else
//不存在
Lucene.Net.Index.IndexReader.IndexExists方法内部的实现方式和上面的类似,当然直接用Lucene.Net.Index.IndexReader.IndexExists更可靠些。
转载于:https://www.cnblogs.com/kwklover/archive/2012/11/10/2764230.html
Lucene.net常见功能实现知识汇总相关推荐
- smt贴片加工行业常见术语及知识汇总
smt贴片加工行业常见术语及知识汇总 SMT贴片加工行业是所有电子成品的上游产业链,电子产品内部都有一块电路板,电路板上包括许多各种类型的电子元件,电子元件需要通过SMT及 DIP装配到电路板上.下面 ...
- 常见堡垒机小知识汇总-行云管家
为了保障企业IT资产安全,越来越多的企业选择购买堡垒机,但他们对于堡垒机相关知识不清楚,今天我们小编就给大家汇总了部分,希望可以帮到大家. 常见堡垒机小知识汇总 堡垒机是硬件还是软件? 目前市面上堡垒 ...
- php语言常见小知识汇总及发送电子邮件方法和技巧总结[图]
一.php语言常见小知识汇总:快速掌握php就差这一步[图] PHP语言一直是互联网绕不开的语言,同时改语言在互联网编程中占据着重要的地位,几乎所有的互联网方面的小程序都可以通过php语言来完成.因此 ...
- Java 必看的 Spring 知识汇总
转载自 Java 必看的 Spring 知识汇总 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途 ...
- 事业编考试计算机专业部分,事业单位考试计算机专业知识汇总-单选题.pdf
事业单位考试计算机专业知识汇总-单选题 事业单位考试计算机专业知识汇总-单选题(1) 1.世界上首先实现存储程序的电子数字计算机是____. A.ENIAC B.UNIVAC C.EDVAC D.ED ...
- 网络基础知识汇总学习
一.网线(双绞线)连接线的制作 双绞线制作有 568A 和 568B 两个标准,日常以 568B 标准较常用. 568B 标准按颜色排序为: 1- 橙白. 2- 橙.3- 绿白.4- 蓝. 5- 蓝白 ...
- Serdes基础知识汇总
Serdes基础知识汇总 从知乎https://zhuanlan.zhihu.com/p/423321485转载 在开始了解高速接口的时候,必然会涉及到SerDes.serdes的知识点实际上非常多, ...
- 三万字,100题!Linux知识汇总!
这篇文章主要介绍了三万字,100题!Linux知识汇总!以及相关的经验技巧,文章约160077字,浏览量243,点赞数7,值得参考! 导读:本文整理了最新的Linux面试题,近3万字,约100道题,分 ...
- MATLAB中常见数字信号处理相关函数汇总
MATLAB中常见数字信号处理相关函数汇总 现将MATLAB信号处理工具箱函数进行分组,便于记忆查询和长期回顾. Waveform Generation(波形产生) chairp: 产生扫频余弦函数: ...
最新文章
- 安装flex4 plug-in插件的时候遇到老是在起始处安装不起
- 【学习笔记】Tableau安装与界面介绍
- Hologres揭秘:深度解析高效率分布式查询引擎
- 解决Hibernate报错The server time zone value is unrecognized or represents more than one time zone
- UVA1374 Power Calcilus快速幂计算
- 多除了1次100的FM BAPI_CURRENCY_CONV_TO_INTERN_9
- FTP文件共传输服务
- 金蝶云拿下客户满意度第一,中国SaaS企业觅得“后发先至”良机
- swift中文文档_Flutter 中文文档:使用 Packages
- dns服务期搭建使用_DNS服务器搭建
- 算法设计与分析基础 第四章谜题
- PS--给图片加水印技巧
- Mac安装Linux虚拟机
- 新浪微博爬虫:模拟登陆+爬取原始页面
- 【旧资料整理】硬盘-数据错误(循环冗余检查)
- 相比普通XRD,同步辐射原位XRD的优势有哪些?
- maven创建eclipse wtp项目
- Java项目:基于SSM的疫情物业系统
- DS1302的使用方式 及 51单片机连接DS1302的驱动程序
- ElasticSearch 文档检索、查询建议、数据聚合
热门文章
- boost::asio::ip::tcp::resolver::query定义不正确导致boost::asio::ip::tcp::resolver的resolve抛出异常...
- Google退出中国 谁最受伤
- Java实现算法导论中Rabin-Karp字符串匹配算法
- Leetcode 292. Nim 游戏 解题思路及C++实现
- windows 7硬盘安装Ubuntu 12.04 后出现grub,无法进入系统解决办法
- android低功耗蓝牙连接失败_低功耗蓝牙 AoA定位系统为室内定位和资产跟踪 提供亚米级精度位置服务...
- Spring Boot内容概要
- 以不同的维度去看待问题
- MySQL 数据库利用alter语句修改表字段属性实例演示,如何拓展表字段长度,sql语句修改表字段名称和类型
- 匹配printf()说明符的类型