欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lucene的简单查询

程序员文章站 2022-07-09 09:31:00
...

一、特定查询

   基本是对一个域进行匹配单一的匹配查询

 

                          Term term=new Term("name","小小");
	        TermQuery query=new TermQuery(term);
	        TopDocs hits=searcher.search(query,10);

 二、QueryParse的简单用法

     基本是对输入的查询先分词然后生成Query的子类,这样是查询共能更加的灵活和强大

 

QueryParse pq=new QueryParse("版本",域,分词器);
Query q=pq.parse("内容");


   内容有些基本的格式

 

java                                                默认包含

java junit /java or junit                          包含一个或者两个

+java +junit /java and junit                         两个都包含

title:ant                                          title域中包含ant

title:extreme -subject:sports                  title中包含切subject中没有
/title:extreme and not subject:sprots                  sprots

(agile or extreme) and method         默认域包含前面的一个或者两但一定包含metod  

title:"junit in action"                  title域为junit in action的文档

title:"junit  action "~5            title域中junit 和action 之间距离小于5的文档

java*                                        前缀是java的文档

java~                                       包含相似的文档lava

lastmodified:(1/1/09~12/31/09)           lastmodified域在第一个日期和第二个日期之间

 练习下简单的搜索

 

QueryParse qp=new QueryParse(版本,域,分词);
Query q=qp.parse("name: 小* and not ype:天灾")
查询的是名字是前缀是小,但是不是天灾的。

 结果

 

阵营==近卫
名字==小小
id==2
阵营==近卫
名字==小牛
id==4

 搜索

 

  QueryParser q=new QueryParser(Version.LUCENE_42, "name", new SmartChineseAnalyzer(Version.LUCENE_42));
	  query=q.parse("name: 小*");

 结果:

 

阵营==近卫
名字==小小
id==2
阵营==近卫
名字==小牛
id==4
阵营==天灾
名字==小黑
id==5

 三、IndexSearch的基本用法

   声明

 

IndexSearch serch=new IndexSearch(IndexReader);
IndexReader的消耗的资源很多,一般一个IndexReader重复使用
             reOpen();用于索引的改变时重新打开
             多线程使用的时候注意线程安全,并关闭老的IndexReader

 search()的常用方法

 

TopDocs  search(query,int)        返回评分高的前N个

TopDocs search(query,Filter,int)  受文档子集约束,约束基于过滤策略

TopFileldDocs search(query,Filter,int,sort)......排序

void search(query,Collector)      不想返回前N个

void search(query,Filter,Collector)...有过滤策略

 四TopDocs常用方法

 

totalHits                     匹配搜索条件的文档那个数

getMaxScore              最大的评分数


ScoreDocs                  匹配文档的一个集合

 五、多样化的查询

 

TermQuery         关键字进行查询

TermRangeQuery    进行一个查询范围选择


NumercRangeQuery 对数字进行范围的一个查询

PrefixQuery         层次递归进行查询通过字符串进行搜索

BooleanQuery  综合查询允许进行进行组合操作的逻辑运算
                BooleanClause.Occur.Must and
                        .............................SHOULD or

PhraseQuery         短语搜索
 
WildCardQuery      通配符查询 */?

FuzzyQuery            模糊查询

MatchAllDocsQuery  匹配所有的