A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】查询索引数据的特殊查询

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号楼三层
联系电话 0371-56061160/61/62
来校路线  地铁一号线梧桐街站A口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马