4. Lucene各种查询操作(Lucene6.0.0)
来源:互联网 发布:网络球机云台设置 编辑:程序博客网 时间:2024/06/06 19:34
项目源码:https://github.com/tangxing1993/lucene
查找索引库
可以按照关键词查询指定的列,根据相关度返回查询结果,也可以自定义搜索结果的排序方式。
查询过程
IndexSearch是查找索引库的核心API,该类继承抽象类Searcher,查询依赖一个或多个索引库。
提供通用的查询方法:
public void doSearch(Query query){IndexSearcher searcher = null;try{searcher = new IndexSearcher(this.getIndexReader());TopDocs topDocs = searcher.search(query, 10);ScoreDoc[] scoreDocs = topDocs.scoreDocs;Document doc = null;for(ScoreDoc sd : scoreDocs){doc = searcher.doc(sd.doc);System.out.println("docid:"+sd.doc+" | url:"+doc.get("url")+" | content:"+doc.get("content"));}}catch(Exception e){e.printStackTrace();}}
常用查询
基本词查询(也叫精确查询,查询不切分的字段)
TermQuery实现精确查询
public void searchByTermQuery(){TermQuery query = new TermQuery(new Term("content", "java"));this.doSearch(query);}
模糊匹配
FuzzyQuery实现模糊查询
public void searchByFuzzy(){FuzzyQuery query = new FuzzyQuery(new Term("content", "lucen"));this.doSearch(query);}
前缀查询
PrefixQuery实现前缀查询
public void searchByPrefix(){PrefixQuery query = new PrefixQuery(new Term("content","hello"));this.doSearch(query);}
布尔查询(多条件查询,组合条件查询)
BooleanQuery实现多条件查询,旧版本直接构建booleanQuery对象,然后添加查询条件实现查询,新版本先用BooleanQuery.builder构建查询条件,然后构建查询对象实现多条件查询。
public void searchByBoolean(){//构建一个多条件查询对象 (注意新旧版本的创建方法不一样) BooleanQuery.Builder buildQuery = new BooleanQuery.Builder();//添加一个精确查询,条件必须的 Occur.MUST true Occur.buildQuery.add(new BooleanClause(new TermQuery(new Term("content", "am")), Occur.MUST));buildQuery.add(new BooleanClause(new WildcardQuery(new Term("content", "j?v*")),Occur.MUST));//构建多条件查询对象BooleanQuery query = buildQuery.build();this.doSearch(query);}
短语查询(要求精确匹配的查询)
PhraseQuery实现短语查询
public void searchByPhrase(){PhraseQuery query = new PhraseQuery("content", "i","am");this.doSearch(query);}
范围查询
TermRangerQuery实现范围查询
public void searchByTermRangeQuery(){TermRangeQuery query = TermRangeQuery.newStringRange("content", "a", "m",true, true);this.doSearch(query);}
跨度查询(字词混合查询)
SpanTermQuery是跨度查询
public void searchBySpanTermQuery(){ SpanNearQuery query = new SpanNearQuery(new SpanQuery[]{ new SpanTermQuery(new Term("content","i")), new SpanTermQuery(new Term("content", "like")) }, 1, true);//1表示跨度在一个范围之内 true表示按照数组中给出的顺序出现 this.doSearch(query);}
解析查询(万能的查询)
QueryParser是查询语句解析器,可以向解析器内输入查询条件,最后由解析器生成对应的查询对象。
public void searchByQueryParse(){ QueryParser parser = new QueryParser("content", analyzer); Query query = null; try { //query = parser.parse("java"); //类似于termQuery //query = parser.parse("url:a.txt"); //切换查找域到url域,查找内容为包含a.txt的内容 //parser.setAllowLeadingWildcard(true); //设置首字母允许使用通配符 //query = parser.parse("url:?.txt"); //类似于WildcardQuery //query = parser.parse("jav~"); //类似于FuzzyQuery //query = parser.parse("am AND like"); //查找内容中包含 am和like的内容 //query = parser.parse("am OR like"); //查找内容中包含am或者like的值 //query =parser.parse("[1 TO 3]"); //查找1-3的内容 query = parser.parse("{1 TO 3}"); //查找包含2的内容 this.doSearch(query); } catch (ParseException e) { e.printStackTrace(); }}
阅读全文
0 0
- 4. Lucene各种查询操作(Lucene6.0.0)
- 2.lucene入门案例(lucene6.0)
- Lucene6入门教程(三)搜索和查询
- Lucene6入门教程(六)搜索/查询方式
- Lucene的各种查询
- 5.Analyzer解析(Lucene6.0.0)
- lucene的丰富的各种查询(二)
- Lucene6.1查询所有数据
- Lucene6.6多查询优化
- lucene的丰富的各种查询(一)
- lucene学习五:各种查询条件
- 3.创建和维护索引库(Lucene6.0.0 CRUD)
- Lucene6.6之多索引+排序+多查询
- lucene 查询 (转载)
- MongDB之各种查询操作
- Lucene6入门教程(二)索引的创建
- Lucene6入门教程(四)索引文件格式
- Lucene6入门教程(五)版本改变
- [spring-mvc] <context:component-scan/> <mvc:annotation-driven/>
- Java中的泛型使用
- 118. Pascal's Triangle
- Lintcode52 Next Permutation solution 题解
- Android 开发第一天
- 4. Lucene各种查询操作(Lucene6.0.0)
- Java IO之字节流
- (58)组件之渲染组件
- HDU 2.1.7
- Lintcode53 Reverse Words in a String solution 题解
- springboot-02thymeleaf注意
- StringBuffer,StringBuilder和String的区别
- Lintcode54 String to Integer II solution 题解
- 如何在MacOS上玩儿汇编?