全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

使用Lucene实现一个简单的布尔搜索功能

什么是lucene

Lucene是apache软件基金会jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。

    Lucene是一个全文搜索框架,而不是应用产品。因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工具让你能实现这些产品。

 在布尔查询的对象中,包含一个子句的集合,各个子句间都是如“与”、“或”这样的布尔逻辑。Lucene中所遇到的各种复杂查询,最终都可以表示成布尔型的查询。下面代码就是实现了一个简单的布尔查询。

package LuceneSearch; 
import org.apache.lucene.analysis.standard.StandardAnalyzer; 
import org.apache.lucene.document.Document; 
import org.apache.lucene.document.Field; 
import org.apache.lucene.index.IndexWriter; 
import org.apache.lucene.index.Term; 
import org.apache.lucene.search.BooleanClause; 
import org.apache.lucene.search.BooleanQuery; 
import org.apache.lucene.search.Hits; 
import org.apache.lucene.search.IndexSearcher; 
import org.apache.lucene.search.TermQuery; 
/** 
 * 布尔搜索测试 
 * @author sdu20 
 * 
 */ 
public class BooleanQueryTest { 
 static final String INDEX_STORE_PATH = "E:\\编程局\\Java编程处\\Index\\"; 
 public static void main(String[] args) { 
 // TODO Auto-generated method stub 
 try{ 
  IndexWriter writer = new IndexWriter(INDEX_STORE_PATH,new StandardAnalyzer(),true); 
  writer.setUseCompoundFile(false); 
  //创建8个文档 
  Document doc1 = new Document(); 
  Document doc2 = new Document(); 
  Document doc3 = new Document(); 
  Document doc4 = new Document(); 
  Document doc5 = new Document(); 
  Document doc6 = new Document(); 
  Document doc7 = new Document(); 
  Document doc8 = new Document(); 
  Field f1 = new Field("bookname","钢铁是怎样炼成的",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f2 = new Field("bookname","英雄儿女",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f3 = new Field("bookname","浮生六记",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f4 = new Field("bookname","太平广记",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f5 = new Field("bookname","文化苦旅",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f6 = new Field("bookname","白夜行",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f7 = new Field("bookname","白毛女",Field.Store.YES,Field.Index.TOKENIZED); 
  Field f8 = new Field("bookname","子不语",Field.Store.YES,Field.Index.TOKENIZED); 
  doc1.add(f1); 
  doc2.add(f2); 
  doc3.add(f3); 
  doc4.add(f4); 
  doc5.add(f5); 
  doc6.add(f6); 
  doc7.add(f7); 
  doc8.add(f8); 
  writer.addDocument(doc1); 
  writer.addDocument(doc2); 
  writer.addDocument(doc3); 
  writer.addDocument(doc4); 
  writer.addDocument(doc5); 
  writer.addDocument(doc6); 
  writer.addDocument(doc7); 
  writer.addDocument(doc8); 
  writer.close(); 
  System.out.println("创建索引成功"); 
  IndexSearcher searcher = new IndexSearcher(INDEX_STORE_PATH); 
  //创建两个词条对象 
  Term t1 = new Term("bookname","生"); 
  Term t2 = new Term("bookname","记"); 
  TermQuery q1 = new TermQuery(t1); 
  TermQuery q2 = new TermQuery(t2); 
  BooleanQuery query = new BooleanQuery(); 
  query.add(q1,BooleanClause.Occur.MUST); 
  query.add(q2,BooleanClause.Occur.MUST); 
  Hits hits = searcher.search(query); 
  for(int i = 0;i<hits.length();i++){ 
  System.out.println(hits.doc(i)); 
  } 
  System.out.println("搜索成功"); 
 }catch(Exception e){ 
  System.out.println(e.getStackTrace()); 
 } 
 } 
} 

BooleanClause.Occur类主要有3种表示,即MUST、MUST_NOT和SHOULD。MUST与MUST_NOT不难理解,一看名字就知道是什么意思,而SHOULD是一个比较特殊的约束,当它与MUST联用时,它将失去意义。检索的结果为MUST子句的检索结果。当它与MUST_NOT联用时,SHOULD的功能就与MUST一样,就退变为MUST和MUST_NOT的查询结果。当SHOULD与SHOULD联用时,它们就表示一种“或”关系。最终检索结果为所有检索子句的检索结果的并集。

上面代码就是查询索引中有“生”字和“记”字的文档,程序运行结果截图如下

索引目录文件夹下截图如下

以上所述是小编给大家介绍的使用Lucene实现一个简单的布尔搜索功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# lucene  # 布尔搜索  # 搜索  # Lucene.Net实现搜索结果分类统计功能(中小型网站)  # Java实现lucene搜索功能的方法(推荐)  # 基于Lucene的Java搜索服务器Elasticsearch安装使用教程  # 使用Java的Lucene搜索工具对检索结果进行分组和分页  # 使用Lucene.NET实现站内搜索  # 基于ASP.NET的lucene.net全文搜索实现步骤  # 布尔  # 子句  # 是一个  # 太平广记  # 白毛女  # 小编  # 它与  # 德文  # 都是  # 文档  # 在此  # 两种  # 中有  # 工具包  # 英文  # 给大家  # 但它  # 不语  # 它将  # 所述 


相关文章: 如何在Tomcat中配置并部署网站项目?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  建站之星如何防范黑客攻击与数据泄露?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何在Golang中引入测试模块_Golang测试包导入与使用实践  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何选择CMS系统实现快速建站与SEO优化?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何快速上传建站程序避免常见错误?  h5网站制作工具有哪些,h5页面制作工具有哪些?  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  ,在苏州找工作,上哪个网站比较好?  网站设计制作企业有哪些,抖音官网主页怎么设置?  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  网页设计与网站制作内容,怎样注册网站?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  浅谈Javascript中的Label语句  c# 在高并发场景下,委托和接口调用的性能对比  b2c电商网站制作流程,b2c水平综合的电商平台?  建站之星后台密码遗忘如何找回?  如何用PHP工具快速搭建高效网站?  如何高效完成自助建站业务培训?  电商网站制作价格怎么算,网上拍卖流程以及规则?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  建站之星下载版如何获取与安装?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  ,网站推广常用方法?  php json中文编码为null的解决办法  建站主机SSH密钥生成步骤及常见问题解答?  如何快速搭建高效可靠的建站解决方案?  如何选择服务器才能高效搭建专属网站?  南平网站制作公司,2025年南平市事业单位报名时间?  建站之星如何快速解决建站难题?  做企业网站制作流程,企业网站制作基本流程有哪些?  建站三合一如何选?哪家性价比更高?  电商平台网站制作流程,电商网站如何制作?  建设网站制作价格,怎样建立自己的公司网站?  公司网站设计制作厂家,怎么创建自己的一个网站?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  制作营销网站公司,淘特是干什么用的?  如何通过虚拟主机快速搭建个人网站?  如何选择香港主机高效搭建外贸独立站?  建站主机功能解析:服务器选择与快速搭建指南  网站制作服务平台,有什么网站可以发布本地服务信息?  建站之星与建站宝盒如何选择最佳方案?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  黑客如何通过漏洞一步步攻陷网站服务器? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。