在开发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常见功能实现知识汇总相关推荐

  1. smt贴片加工行业常见术语及知识汇总

    smt贴片加工行业常见术语及知识汇总 SMT贴片加工行业是所有电子成品的上游产业链,电子产品内部都有一块电路板,电路板上包括许多各种类型的电子元件,电子元件需要通过SMT及 DIP装配到电路板上.下面 ...

  2. 常见堡垒机小知识汇总-行云管家

    为了保障企业IT资产安全,越来越多的企业选择购买堡垒机,但他们对于堡垒机相关知识不清楚,今天我们小编就给大家汇总了部分,希望可以帮到大家. 常见堡垒机小知识汇总 堡垒机是硬件还是软件? 目前市面上堡垒 ...

  3. php语言常见小知识汇总及发送电子邮件方法和技巧总结[图]

    一.php语言常见小知识汇总:快速掌握php就差这一步[图] PHP语言一直是互联网绕不开的语言,同时改语言在互联网编程中占据着重要的地位,几乎所有的互联网方面的小程序都可以通过php语言来完成.因此 ...

  4. Java 必看的 Spring 知识汇总

    转载自 Java 必看的 Spring 知识汇总 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途 ...

  5. 事业编考试计算机专业部分,事业单位考试计算机专业知识汇总-单选题.pdf

    事业单位考试计算机专业知识汇总-单选题 事业单位考试计算机专业知识汇总-单选题(1) 1.世界上首先实现存储程序的电子数字计算机是____. A.ENIAC B.UNIVAC C.EDVAC D.ED ...

  6. 网络基础知识汇总学习

    一.网线(双绞线)连接线的制作 双绞线制作有 568A 和 568B 两个标准,日常以 568B 标准较常用. 568B 标准按颜色排序为: 1- 橙白. 2- 橙.3- 绿白.4- 蓝. 5- 蓝白 ...

  7. Serdes基础知识汇总

    Serdes基础知识汇总 从知乎https://zhuanlan.zhihu.com/p/423321485转载 在开始了解高速接口的时候,必然会涉及到SerDes.serdes的知识点实际上非常多, ...

  8. 三万字,100题!Linux知识汇总!

    这篇文章主要介绍了三万字,100题!Linux知识汇总!以及相关的经验技巧,文章约160077字,浏览量243,点赞数7,值得参考! 导读:本文整理了最新的Linux面试题,近3万字,约100道题,分 ...

  9. MATLAB中常见数字信号处理相关函数汇总

    MATLAB中常见数字信号处理相关函数汇总 现将MATLAB信号处理工具箱函数进行分组,便于记忆查询和长期回顾. Waveform Generation(波形产生) chairp: 产生扫频余弦函数: ...

最新文章

  1. 安装flex4 plug-in插件的时候遇到老是在起始处安装不起
  2. 【学习笔记】Tableau安装与界面介绍
  3. Hologres揭秘:深度解析高效率分布式查询引擎
  4. 解决Hibernate报错The server time zone value is unrecognized or represents more than one time zone
  5. UVA1374 Power Calcilus快速幂计算
  6. 多除了1次100的FM BAPI_CURRENCY_CONV_TO_INTERN_9
  7. FTP文件共传输服务
  8. 金蝶云拿下客户满意度第一,中国SaaS企业觅得“后发先至”良机
  9. swift中文文档_Flutter 中文文档:使用 Packages
  10. dns服务期搭建使用_DNS服务器搭建
  11. 算法设计与分析基础 第四章谜题
  12. PS--给图片加水印技巧
  13. Mac安装Linux虚拟机
  14. 新浪微博爬虫:模拟登陆+爬取原始页面
  15. 【旧资料整理】硬盘-数据错误(循环冗余检查)
  16. 相比普通XRD,同步辐射原位XRD的优势有哪些?
  17. maven创建eclipse wtp项目
  18. Java项目:基于SSM的疫情物业系统
  19. DS1302的使用方式 及 51单片机连接DS1302的驱动程序
  20. ElasticSearch 文档检索、查询建议、数据聚合

热门文章

  1. boost::asio::ip::tcp::resolver::query定义不正确导致boost::asio::ip::tcp::resolver的resolve抛出异常...
  2. Google退出中国 谁最受伤
  3. Java实现算法导论中Rabin-Karp字符串匹配算法
  4. Leetcode 292. Nim 游戏 解题思路及C++实现
  5. windows 7硬盘安装Ubuntu 12.04 后出现grub,无法进入系统解决办法
  6. android低功耗蓝牙连接失败_低功耗蓝牙 AoA定位系统为室内定位和资产跟踪 提供亚米级精度位置服务...
  7. Spring Boot内容概要
  8. 以不同的维度去看待问题
  9. MySQL 数据库利用alter语句修改表字段属性实例演示,如何拓展表字段长度,sql语句修改表字段名称和类型
  10. 匹配printf()说明符的类型