博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于Lucene的查询索引
阅读量:6909 次
发布时间:2019-06-27

本文共 2257 字,大约阅读时间需要 7 分钟。

1.1. 实现步骤

  第一步:创建一个Directory对象,也就是索引库存放的位置。

  第二步:创建一个indexReader对象,需要指定Directory对象。

  第三步:创建一个indexsearcher对象,需要指定IndexReader对象

  第四步:创建一个TermQuery对象,指定查询的域和查询的关键词。

  第五步:执行查询。

  第六步:返回查询结果。遍历查询结果并输出。

  第七步:关闭IndexReader对象

1.2.IndexSearcher搜索方法

1.3.query查询语句对象

  对要搜索的信息创建Query查询对象,Lucene会根据Query查询对象生成最终的查询语法,类似关系数据库Sql语法一样Lucene也有自己的查询语法,比如:“name:lucene”表示查询Field的name为“lucene”的文档信息。

  1.3.1.使用QueryParser查询

    通过QueryParser也可以创建Query,QueryParser提供一个Parse方法,此方法可以直接根据查询语法来查询。Query对象执行的查询语法可通过System.out.println(query);查询。需要使用到分析器。创建索引时使用的分析器和查询索引时使用的分析器要一致。

  1.3.2.使用query的子类查询

    TermQuery:

             根据词进行搜索(只能从文本中进行搜索)

    QueryParser:

             根据域名进行搜索,可以设置默认搜索域,推荐使用. (只能从文本中进行搜索)

    NumericRangeQuery:

             从数值范围进行搜索

    BooleanQuery:

             组合查询,可以设置组合条件,not and or.从多个域中进行查询

               must相当于and关键字,是并且的意思

           should,相当于or关键字或者的意思

           must_not相当于not关键字, 非的意思

           注意:单独使用must_not  或者 独自使用must_not没有任何意义

    MatchAllDocsQuery:

             查询出所有文档

    MultiFieldQueryParser:

             可以从多个域中进行查询,只有这些域中有关键词的存在就查询出来

1.4.代码

1 @Test 2 public void testIndexSearch() throws Exception{ 3  4     //创建分词器(与创建索引用同样的分词器) 5     Analyzer analyzer=new StandardAnalyzer(); 6     //创建查询对象:第一个参数:默认搜索域  第二个参数 :分词器 7     //默认搜索的作用:如果搜索语法中指定了域名,从指定域中搜索,如果未指定从默认搜索域中搜索 8     QueryParser queryParser=new QueryParser("fileContext",analyzer); 9     //查询语法 域名:搜索关键字10     Query query = queryParser.parse("fileContext:java");11 12 13     //指定索引的目录14     Directory directory= FSDirectory.open(new File("E:\\ideaworkpase\\demotest\\luceneindex"));15     //索引的读取对象16     IndexReader indexReader=IndexReader.open(directory);17     //创建索引的搜索对象18     IndexSearcher indexSearcher=new IndexSearcher(indexReader);19     //搜索:第一个参数:查询语句对象  第二个参数:指定显示记录数20     TopDocs search = indexSearcher.search(query, 10);21     //一共搜索到多少条记录22     System.out.println("====total===:"+search.totalHits);23 24     //从搜索结果对象中获取结果集25     ScoreDoc [] scoreDocs=search.scoreDocs;26     for(ScoreDoc scoreDoc:scoreDocs){27         //获取Id28         int docID=scoreDoc.doc;29         //通过文档ID从硬盘上获取文档30         Document document = indexReader.document(docID);31         //get域名,打印出值32         System.out.println("+++++fileName++++:"+document.get("fileName"));33     }

 

 

 

 

转载于:https://www.cnblogs.com/fengcha0/p/9989101.html

你可能感兴趣的文章
自己主动下载源代码_并编译_打包_部署_重新启动服务的Shell脚本
查看>>
常思己过 如切如磋
查看>>
Android中使用Handler造成内存泄露的分析和解决
查看>>
《ArcGIS Engine+C#实例开发教程》第六讲 右键菜单添加与实现
查看>>
ArrayList与LinkedList区别
查看>>
Linux 学习之路:认识shell和bash
查看>>
POJ 3041(最小点覆盖)
查看>>
Viewing the interface of your Swift code,查看Swift代码的头文件的三种方法
查看>>
Custom Accessories
查看>>
【转】xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)
查看>>
DirectX 3D 之C#开发
查看>>
隐藏nginx 版本号信息(转)
查看>>
转:Java中的Clone()方法详解
查看>>
ping命令
查看>>
【转】PHP网站(nginx、php-fpm、mysql) 用户权限解析
查看>>
Spring Boot项目的打包和部署
查看>>
元素绝对居中终极办法兼容IE8
查看>>
weblogic 的应用 常见问题处理 db2 链接不上(转载)
查看>>
linux下的Shell编程(5)循环
查看>>
Switch 语句
查看>>