solr查询
来源:互联网 发布:mac txt转码 编辑:程序博客网 时间:2024/05/21 06:46
solrJ和solr服务端有两种“沟通”方式:
第一,利用http进行通信。
private static HttpSolrServer server4KF = new HttpSolrServer(url4KF);
第二,直接访问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();
}
}
- solr查询
- Solr查询
- Solr-----9、Solr查询语法
- solr 查询参数说明
- solr 查询参数说明
- solr的ExtendedDisMax查询
- Solr学习总结-查询
- solr 查询参数说明
- Solr执行查询操作
- solr的facet查询
- solr查询参数使用说明
- solr的facet查询
- solr查询格式
- Solr查询参数简介
- solr查询参数使用说明
- solr查询语法
- solr multiValued的查询
- solr查询例子
- LeetCode--Bit Manipulation
- 最常用的15大Eclipse开发快捷键技巧
- Codeforces Buttons
- DLL输入和输出函数—dllinport与dllexport
- java中冒泡排序,根据对象的属性,排对象
- solr查询
- java 批量上传文件
- labview与机器视觉,labview调用opencv函数DLL
- 什么是垂直搜索引擎
- scala中的map
- Socket编程
- 使用Docker Toolbox运行httpd容器,挂载自己的网页目录为什么不行?-要搞清楚Toolbox终端根目录结构、虚拟机VM的根目录结构的区别
- Android探究之LayoutInflater setFactory
- 子进程的异步等待方式