hibernate search 组合搜索方式

本文介绍了使用Lucene和Hibernate Search实现复杂查询的方法,通过三种不同的方式演示如何组合多个搜索条件来精确查找信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用hibernate search来搜索一个加入索引的信息时,可以组合多个搜索条件进行灵活搜索:

 

方式一:

package org.edu.scut.lab24.uam.dao.impl;

import java.util.List;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.edu.scut.lab24.uam.hibernate.Posts;
import org.hibernate.search.FullTextQuery;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;

public class searchTest {

	/**
	 * 从多个字段里进行组合搜索
	 * @param objectPK
	 * 			必段首先满足的字段(如搜索一个社区的帖子,那先得满足这个帖子为所指定的社区的ID)搜索
	 * @param content
	 * 			其次满足的内容搜索
	 * @throws Exception
	 */
	//下面方法都是没有考虑自己开启事务,是建立在调用该方法会开启事务的基础上
	public void mySearch1(String objectPK , String content) throws Exception{
		
		FullTextSession fullTextSession = Search.createFullTextSession(getSession());//这个要从你的支持开启session的地方获取,如继承了HibernateDaoSupport的类里面就帮我们开启session的
		
		String[] properties = new String[] { "title", "description", "post_user_username" };//在字段"title", "description", "post_user_username"中进行搜索
		StandardAnalyzer analyzer = new StandardAnalyzer();
		MultiFieldQueryParser parser = new MultiFieldQueryParser(//MultiFieldQueryParser这样使用是表示一个查询条件在多个字段里进行查询
				// 这个是用户输入的的搜索串在下面的field里进行搜索
				properties,
				analyzer);
		parser.setDefaultOperator(QueryParser.OR_OPERATOR);
		BooleanQuery booleanQuery = new BooleanQuery();//用BooleanQuery来做搜索条件的组合,即多条件查询
		booleanQuery.add(parser.parse(content), BooleanClause.Occur.MUST);

		
		QueryParser parser2 = new QueryParser("post_obj_objectID", analyzer);// 从指定的ID里搜索,也就是首先在满足这个条件,再去搜索用户输入的查询串
		booleanQuery.add(parser2.parse(objectPK), BooleanClause.Occur.MUST);
		
		QueryParser parser3 = new QueryParser("isReply",analyzer);//第三个要满足的条件,还可以继续添加更多的条件
		booleanQuery.add(parser3.parse("0"),BooleanClause.Occur.MUST);
		
		FullTextQuery hibQuery = fullTextSession.createFullTextQuery(booleanQuery, Posts.class);
		System.out.println("搜索的结果数:" +  hibQuery.getResultSize());
		List result = hibQuery.list();//用这个方法可以返回所有搜索的结果对象
	}
}

 

方式二

public void mySearch2(String objectPK , String content){
		
		FullTextSession fullTextSession = Search.createFullTextSession(getSession());//这个要从你的支持开启session的地方获取,如继承了HibernateDaoSupport的类里面就帮我们开启session的
		String[] properties = new String[] { "post_obj_objectID", "title" , "isReply"};
		
		Query luceneQuery = MultiFieldQueryParser.parse(new String[] { objectPK,
				content , "0"}, properties,
				new BooleanClause.Occur[] { Occur.MUST, Occur.MUST,Occur.MUST},
				new StandardAnalyzer());//MultiFieldQueryParser这样使用是表示多个查询条件对应在多个字段里进行查询

		FullTextQuery hibQuery = fullTextSession.createFullTextQuery(luceneQuery,
				Posts.class);
		System.out.println("搜索的结果数:" +  hibQuery.getResultSize());
		List result = hibQuery.list();//用这个方法可以返回所有搜索的结果对象
	}

 方式三

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值