读书人

Lucene的简略查询

发布时间: 2013-04-12 18:33:12 作者: rapoo

Lucene的简单查询
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域中包含anttitle: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~                                       包含相似的文档lavalastmodified:(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 orPhraseQuery         短语搜索 WildCardQuery      通配符查询 */?FuzzyQuery            模糊查询MatchAllDocsQuery  匹配所有的

?

读书人网 >开源软件

热点推荐