全文检索Lucence(五)——查询

本文深入探讨Lucene的查询机制,包括查询语句与对象查询两种方式,如TermQuery、RangeQuery和WildcardQuery等。文章指出,Lucene通过QueryParser将查询内容转化为Query对象,并使用IndexSearcher执行查询。同时,文章预告了后续将涉及的高亮、分页、排序等高级话题。
摘要由CSDN通过智能技术生成

    一、简单概要:

无论是分词器、索引(索引库、索引表、数据)等都是为最终的索引做服务,个人觉得这张图特别重要:

    这张图展示了Lucence工作原理的最核心部分:创建索引库(由索引表和数据组成)。

    索引表:是对文档集合的一个索引,建立索引使用的是分词器,而且将来搜索的时候,也使用同一个分词器对象。     文档集合内部,Lucence会自动维护一个文档内容编号,它相当于hibernate映射实体的自增主键。

    通过分词器可以建立并维护索引表,维护索引的时候,一般采用先删除后增加的方法来回避更新带来的性能问题。


二、关于查询:

    类比Hibernate,Lucence查询分为:查询语句和对象查询两种查询方式。如果使用查询语句,一般也会在程序中将查询条件进一步封装成查询对象。

1、查询语句:

    QueryParser对象,以查询内容字串和查询字段为参数,将两者解析成Query对象,IndexSearcher对象以Query对象为参数进行查询。

    前面的文章中都使用了这种查询:

	/**
	 * 搜索
	 * 
	 * IndexSearcher 是用来在索引库中进行查询的
	 */
	@Test
	public void search() throws Exception {
//		String queryString = "document";
		String queryString = "adddocument";

		// 1,把要搜索的文本解析为 Query
		String[] fields = { "name", "content" };
		QueryParser queryParser = new MultiFieldQueryParser(fields, analyzer);
		Query query = queryParser.parse(queryString);

		// 2,进行查询
		IndexSearcher indexSearcher = new IndexSearcher(indexPath);
		Filter filter = null;
		TopDocs topDocs = indexSearcher.search(query, filter, 10000);
		System.out.println("总共有【" + topDocs.totalHit
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值