博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[ solr入门 ] - 利用solrJ进行检索
阅读量:7079 次
发布时间:2019-06-28

本文共 2941 字,大约阅读时间需要 9 分钟。

hot3.png

solrJ可以看成是solr的java版客户端,提供基本的索引维护、检索等功能。

 

solrJ和solr服务端有两种“沟通”方式:

第一,利用http进行通信。

第二,直接访问solrCore(solr配置文件、索引文件等),不需要http通信(without http)。

solrJ的SolrServer类结构如下图所示:

EmbeddedSolrServer是第二种方式,CommonsHttpSolrServer,LBHttpSolrServer是第一种方式,

其中LBHttpSolrServer是在CommonsHttpSolrServer的基础上提供了负载均衡的功能(load Balanced)。

在很多应用场景下,我们基本都会选择CommonsHttpSolrServer(LBHttpSolrServer)的方式。最近笔者有这样一个需求,在异构平台上,有多种语言开发的系统都需要对基础数据进行检索,如果每个系统都针对性的开发一个客户端,主要缺陷是紧耦合。因此笔者考虑在solr的基础上开发一套标准的webService接口发布服务,如果在solrCore的基础上进行调整,调整量太大,如果借助solrJ的CommonsHttpSolrServer与solrServer进行沟通,那么就会多走一次http。最后发现EmbeddedSolrServer可以解决这个问题。

然后目前EmbeddedSolrServer也有一些问题需要处理,例如:multiCore、load Balanced等。

 

下面我们从检索入手,初步了解solrJ的使用方法。

第一步:建立solrJ客户端的“通讯员”(CommonsHttpSolrServer)

SolrServer server = new CommonsHttpSolrServer( url );

 

第二步:检索

方式一:借助SolrRequestParsers解析“检索字符串”进行检索

public void query01(String queryString) {

        SolrParams solrParams = SolrRequestParsers

                .parseQueryString(queryString);

        try {

            QueryResponse rsp = solr.query(solrParams);

            List<PatentBean> results = rsp.getBeans(PatentBean.class);

            for (PatentBean bean : results)

                System.out.println(bean.toString());

        } catch (SolrServerException e) {

            e.printStackTrace();

        }

    }

queryString:String queryString = "q=ti:汽车&version=2.2&start=0&rows=10&indent=on";

这种方式简单,但是在应用中通过拼接字符串是比较憋足的,所以这种方式应用较少。

注意:

List<PatentBean> results = rsp.getBeans(PatentBean.class);Bean这种方式,不管索引维护,还是检索都十分方便。

 

方式二:借助ModifiableSolrParams对象接收查询条件进行检索

public void query02(String queryString) {

        ModifiableSolrParams solrParams = new ModifiableSolrParams();

        solrParams.add("q", queryString);

        solrParams.add("start", "0");

        solrParams.add("rows", "10");

        try {

            QueryResponse rsp = solr.query(solrParams);

            List<PatentBean> results = rsp.getBeans(PatentBean.class);

            for (PatentBean bean : results)

                System.out.println(bean.toString());

        } catch (SolrServerException e) {

            e.printStackTrace();

        }

    }

这种方式和第一种类似,如果第一种方式用个StringBuilt接收参数,那么就没什么两样了! 

 

方式三:借助solrQuery对象接收查询条件进行检索

public void query02(String queryString) {

        SolrQuery query = new SolrQuery();

        query.setQuery(queryString);

        query.setStart(0);

        query.setRows(10);

        QueryResponse rsp;

        try {

            rsp = solr.query(query);

            List<PatentBean> results = rsp.getBeans(PatentBean.class);

            for (PatentBean bean : results)

                System.out.println(bean.toString());

        } catch (SolrServerException e) {

            e.printStackTrace();

        }

    }

添加高亮效果:

query.setHighlight(true).setHighlightSnippets(1);

query.setParam("hl.fl", "ti");

 

使用EmbeddedSolrServer进行检索

创建EmbeddedSolrServer对象,如下:

private static CoreContainer.Initializer initializer = null;

    private static CoreContainer coreContainer = null;

    private static EmbeddedSolrServer server = null;

    static {

        try {

            System.setProperty("solr.solr.home", "D:/solrHome/example/solr02");

            initializer = new CoreContainer.Initializer();

            coreContainer = initializer.initialize();

            server = new EmbeddedSolrServer(coreContainer, "");

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

 

转载于:https://my.oschina.net/u/2929819/blog/805209

你可能感兴趣的文章
String StringBuffer StringBuilder
查看>>
bash的工作特性及命令状态返回查询
查看>>
Samba服务共享(匿名用户访问、本地用户访问、虚拟用户访问)
查看>>
HttpServletResponse输出乱码的问题
查看>>
你真的很熟分布式和事务吗?
查看>>
基于ThreadPoolExecutor实现工作引擎参考
查看>>
Go语言的基本数据类型
查看>>
WEB测试:***apache
查看>>
42 个移动端启动页面优化 Tips
查看>>
Egret之ProtoBuf安装
查看>>
Cocos2d-x3.0游戏实例《别救我》目录
查看>>
我的友情链接
查看>>
ASP开发中数据库文件调用的捷径
查看>>
debian启动项与服务设置
查看>>
WinPcap编程环境设置
查看>>
基于openssl的https服务配置
查看>>
从 CentOS 5.5 中精简出属于自己的专属Linux (三)
查看>>
C和指针---第十五章:输入/输出函数
查看>>
Linux打开txt文件乱码的解决方法
查看>>
腾讯微博android授权 SharedPreferences用法
查看>>