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 匹配所有的
?