【郑州校区】查询索引数据的特殊查询
1.1.1、特殊查询抽取公用的搜索方法: [AppleScript] 纯文本查看 复制代码
public void search(Query query) throws Exception {
// 创建目录对象
Directory directory = FSDirectory.open(new File("C:\\tmp\\indexDir"));
// 索引的读取对象
IndexReader indexReader = DirectoryReader.open(directory);
// 索引的搜索工具
IndexSearcher searcher = new IndexSearcher(indexReader);
// 尝试查询,1-查询对象,2-查询的条数
// 返回的是前n条文档的对象,topDocs:包含文档的总条数,文档的得分数组
TopDocs topDocs = searcher.search(query, 10);
System.out.println("搜索的命中总条数:" + topDocs.totalHits);
// 获取得分文档的数组,得分文档包含文档编号以及得分
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs) {
System.out.println("文档编号" + scoreDoc.doc);
System.out.println("文档得分" + scoreDoc.score);
// 根据编号查询文档
Document document = indexReader.document(scoreDoc.doc);
System.out.println(document.get("id"));
System.out.println(document.get("title"));
}
} 1.1.1.1、TermQuery(词条查询)[AppleScript] 纯文本查看 复制代码 /**
* 词条查询
* 查询条件必须是最小粒度不可再分割的内容
* 场景:不可分割的字段可以采用,比如id
* 缺点:只能查询一个词,例如可以查询"谷歌",不能查询"谷歌地图"
* @throws IOException
* @throws ParseException
*/
@Test
public void testTermSearcher() throws IOException, ParseException{
// 创建查询对象
Query query = new TermQuery(new Term("title", "谷歌"));
// 执行搜索操作
searcher(query);
} |
1.1.1.2、WildcardQuery(通配符查询)[AppleScript] 纯文本查看 复制代码
@Test
public void testWildCardQuery() throws Exception {
// 查询条件对象(通配符
// ?:通配一个字符
// *:通配多个字符
Query query = new WildcardQuery(new Term("title", "*歌*"));
search(query);
} 1.1.1.3、FuzzyQuery(模糊查询)[AppleScript] 纯文本查看 复制代码 @Test
public void testFuzzyQuery() throws Exception {
// 查询条件对象(模糊查询
// 参数:1-词条,查询字段及关键词,关键词允许写错;2-允许写错的最大编辑距离,并且不能大于2(0~2)
// 最大编辑距离:facebool-->facebook需要编辑的次数,包括大小写
Query query = new FuzzyQuery(new Term("title", "facebook"), 1);
search(query);
} |
1.1.1.4、NumericRangeQuery(数值范围查询)[AppleScript] 纯文本查看 复制代码 @Test
public void testNumericRangeQuery() throws Exception {
// 查询条件对象(数值范围查询
// 查询非String类型的数据或者说是一些继承Numeric类的对象的查询
// 1-字段;2-最小值;3-最大值;4-是否包含最小值;5-是否包含最大值
Query query = NumericRangeQuery.newLongRange("id", 2l, 4l, true, true);
search(query);
} |
1.1.1.5、BooleanQuery(组合查询)
[AppleScript] 纯文本查看 复制代码 @Test
public void testBooleanQuery() throws Exception {
Query query1 = NumericRangeQuery.newLongRange("id", 2l, 4l, true, true);
Query query2 = NumericRangeQuery.newLongRange("id", 0l, 3l, true, true);
// boolean查询本身没有查询条件,它可以组合其他查询
BooleanQuery query = new BooleanQuery();
// 交集: Occur.MUST + Occur.MUST
// 并集:Occur.SHOULD + Occur.SHOULD
// 非:Occur.MUST_NOT
query.add(query1, Occur.SHOULD);
query.add(query2, Occur.SHOULD);
search(query);
} |
传智播客·黑马程序员郑州校区地址 河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层
|