【Apache Solr系列之四】Solr客戶端SolrJ API使用文檔-查詢實例

在上一篇文章中已經學了SolrJ的增刪改。本篇來學習下查詢的一些實例

(還未了解SolrJ 增刪改的可以查看以上博文:http://blog.csdn.net/weijonathan/article/details/16963437)

1、查詢排序

public static void solrOrder() throws SolrServerException {
		solrCore = new HttpSolrServer(url);
		SolrQuery query = new SolrQuery();
		query.setQuery("*:*");
		query.addSortField("id", SolrQuery.ORDER.asc);
		QueryResponse rsp = solrCore.query(query);
		List<App> beans = rsp.getBeans(App.class);
		for (int i = 0; i < beans.size(); i++) {
			System.out.println(beans.get(i).getName());
		}
	}
使用addSortField可將查詢出來的結果按照你指定的字段進行排序

2、模糊查詢

public static void likeQuery() throws SolrServerException {
		solrCore = new HttpSolrServer(url);
		SolrQuery query = new SolrQuery();
		query.setQuery("name:*天天*");
		QueryResponse rsp = solrCore.query(query);
		List<App> beans = rsp.getBeans(App.class);
		for (int i = 0; i < beans.size(); i++) {
			System.out.println(beans.get(i).getName());
		}
	}
模糊查詢其實很簡單,因爲solr本身就支持正則查詢,所以通過setQuery指定你要查詢的字段,以及要做模糊查詢的值就搞定了!

3、分頁查詢

public static void pageQuery() throws SolrServerException {
		solrCore = new HttpSolrServer(url);
		SolrQuery query = new SolrQuery();
		query.setQuery("name:*天天*");
		query.setStart(0);
		query.setRows(10);
		QueryResponse rsp = solrCore.query(query);
		List<App> beans = rsp.getBeans(App.class);
		for (int i = 0; i < beans.size(); i++) {
			System.out.println(beans.get(i).getName());
		}
	}
這裏用到了setStart以及setRows方法進行分頁

4、多條件 ||(或)的情況

public static void multipleQuery1() throws SolrServerException {
		solrCore = new HttpSolrServer(url);
		SolrQuery query = new SolrQuery();
		query.setQuery("artist:*Tencent* name:*天天*");// 多條件使用空格分隔
		query.setFields("name", "id_in_appstore", "artist");
		QueryResponse rsp = solrCore.query(query);
		List<App> beans = rsp.getBeans(App.class);
		for (int i = 0; i < beans.size(); i++) {
			System.out.println(beans.get(i).getName());
			System.out.println(beans.get(i).getArtist());
			System.out.println(beans.get(i).getId_in_appstore());
		}
	}
在setQuery中設置多個查詢條件,多個查詢條件中間用空格隔開就ok

5、多條件& (且)的情況:

public static void multipleQuery2() throws SolrServerException {
		solrCore = new HttpSolrServer(url);
		SolrQuery query = new SolrQuery();
		query.setQuery("name:*天天*");// 多條件使用空格分隔
		query.setFilterQueries("artist:*Tencent*");
		query.setFields("name", "id_in_appstore", "artist");
		QueryResponse rsp = solrCore.query(query);
		List<App> beans = rsp.getBeans(App.class);
		for (int i = 0; i < beans.size(); i++) {
			System.out.println(beans.get(i).getName());
			System.out.println(beans.get(i).getArtist());
			System.out.println(beans.get(i).getId_in_appstore());
		}
	}
name包含"天天"且artist包含“Tencent”


對於普通的查詢,以上這些查詢已經足夠了!但是對於複雜的查詢當然光靠這些是遠遠不夠的。

後面會有博文介紹更加複雜的查詢。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章