首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

施用solrj进行查询操作

2012-10-19 
使用solrj进行查询操作?Solrj是Solr官方提供的基于Java的Solr客户端,提供完善的Solr操作API。?以好友为例。

使用solrj进行查询操作

?

Solrj是Solr官方提供的基于Java的Solr客户端,提供完善的Solr操作API。

?

以好友为例。首先定义SpaceFriend实体Bean,用来直接处理Solr返回信息:

?

import org.apache.solr.client.solrj.beans.Field;

?

public class SpaceFriend {

? ? @Field("Id")

? ? int id;

?

? ? @Field("WebNickname")

? ? String webNickname;

?

? ? @Field("portrait")

? ? String Portrait;

?

? ? @Field("Gender")

? ? int gender;

?

? ? @Field("Age")

? ? int age;

?

? ? @Field("IsAgePublic")

? ? boolean isAgePublic;

?

? ? @Field("Horoscope")

? ? int horoscope;

?

? ? @Field("marriage")

? ? int marriage;

?

? ? @Field("FriendType")

? ? String[] friendType;

?

? ? @Field("CityNow")

? ? String cityNow;

?

? ? @Field("isCityPublic")

? ? boolean isCityPublic;

}

?

为了方便写了一个junit测试:

?

import java.util.List;

?

import org.junit.After;

import org.junit.AfterClass;

import org.junit.Before;

import org.junit.BeforeClass;

import org.junit.Test;

?

import org.apache.solr.client.solrj.*;

import org.apache.solr.client.solrj.SolrQuery.ORDER;

import org.apache.solr.client.solrj.impl.BinaryRequestWriter;

import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;

import org.apache.solr.client.solrj.response.QueryResponse;

?

public class SolrJTest {

? ? //多线程共享

? ? static CommonsHttpSolrServer server;

?

? ? @BeforeClass

? ? public static void beforeClassClass() throws Exception {

? ? ? ? server = new CommonsHttpSolrServer(

? ? ? ? ? ? ? ? "http://localhost:8088/solr");

? ? ? ? server.setSoTimeout(1000);

? ? ? ? server.setConnectionTimeout(100);

? ? ? ? server.setDefaultMaxConnectionsPerHost(100);

? ? ? ? server.setMaxTotalConnections(100);

? ? ? ? server.setFollowRedirects(false);

? ? ? ? server.setAllowCompression(true);

? ? ? ? server.setMaxRetries(1);

?

? ? ? ? //提升性能采用流输出方式

? ? ? ? server.setRequestWriter(new BinaryRequestWriter());

? ? }

?

? ? @AfterClass

? ? public static void tearDownAfterClass() throws Exception {

? ? }

?

? ? /**

? ? ?* @throws java.lang.Exception

? ? ?*/

? ? @Before

? ? public void setUp() throws Exception {

?

? ? }

?

? ? /**

? ? ?* @throws java.lang.Exception

? ? ?*/

? ? @After

? ? public void tearDown() throws Exception {

? ? }

?

? ? @Test

? ? public void QueryTest() throws SolrServerException {

? ? ? ? SolrQuery query = new SolrQuery();

?

? ? ? ? //主查询

? ? ? ? query.setQuery("*:*");

?

? ? ? ? //采用过滤器查询可以提高性能

?

? ? ? ? query.addFilterQuery("Searchable:1");

? ? ? ? query.addFilterQuery("SpaceAccessPrivate:1");

?

? ? ? ? //区间查询

? ? ? ? query.addFilterQuery("Age:[* TO 50]");

? ? ? ? query.addFilterQuery("FriendType:1");

?

? ? ? ? //添加排序

? ? ? ? query.addSortField("Score", ORDER.desc);

?

? ? ? ? //分页返回结果

? ? ? ? query.setStart(0);

? ? ? ? query.setRows(10);

?

? ? ? ? QueryResponse rsp = server.query(query);

? ? ? ? List<SpaceFriend> beans = rsp.getBeans(SpaceFriend.class);

?

? ? ? ? //输出符合条件的结果数

? ? ? ? System.out.println("NumFound: " + rsp.getResults().getNumFound());

?

? ? ? ? //输出结果

? ? ? ? for (int i = 0; i < beans.size(); i++) {

? ? ? ? ? ? SpaceFriend friend = beans.get(i);

?

? ? ? ? ? ? System.out.println("SpaceFriend " + i);

? ? ? ? ? ? System.out.println("Id " + friend.id);

? ? ? ? ? ? System.out.println("WebNickname:" + friend.webNickname);

? ? ? ? }

? ? }

}

热点排行