什么是SolrJ

既然Solr是以单独的WebApp形式存在的,那么Solr理应提供与Solr通信的Api吧,对的,这就是SolrJ,既然与solr通信是通过url,那么其实我们也可以不用SolrJ,因为可以拼字符串的嘛。

http://localhost:8983/solr/Artist/select?q=Artist_Name:周杰伦&wt=json&indent=true

这样完全是可以的,但是用SolrJ来拼字符串更方便而已,如果看到这里,你就想用拼字符串的方式,那么将会很痛苦,因为SolrJ最大的好处就是解析返回的结果。如下:

{
"responseHeader":{
"status":0,
"QTime":2},
"response":{"numFound":1,"start":0,"docs":[
{
"Artist_NickName":"周杰伦",
"Artist_NameQP":"",
"Artist_IconNo":"0",
"Artist_MVNum":191,
"Artist_AuthDes":"",
"Artist_SpaceID":-1,
"Artist_Name":"周杰伦",
"Artist_Name_Exact":"周杰伦",
"Artist_CategoryID":"1415,1706",
"Artist_SongNum":847,
"Artist_Piclink2":"sod/artist/560/Z/周杰伦.jpg",
"Artist_MobilePic":"sod/artist/mobile/Z/周杰伦.jpg",
"Artist_ID":519,
"Artist_Piclink1":"sod/artist/14/03/1394692573546.jpg",
"Artist_PinYinInitial":"ZJL",
"_version_":1479005578890051584}]
}}

如果您非要自己解析…………..

SolrJ的使用

Jar包

  1、 apache-solr-solrj-3.5.0.jar

2、 commons-httpclient-3.1.jar

3、slf4j-api-1.6.0.jar

4、commons-logging-1.1.jar

连接Solr

HttpSolrServer solr = new HttpSolrServer(
PropertieFactory.getProperty("solr_Song_index_url"));
SolrQuery songQuery = new SolrQuery();

其实就两行代码。其中url需要说明下,我用的是多索引库,所以URL如下:

Localhost:8983/solr/索引库名称

这样就能连接上了。

查询

songQuery.setRows(searchParameters.getPageSize());
songQuery.setStart(searchParameters.getStarRecord());
songQuery.setFields("Song_SongID", "Song_Name", "Song_SingerName",
"Song_SpaceID", "Song_FilePic", "Song_FileMV", "Song_FileOL",
"Song_CategoryRelated", "Song_CreateTime",
"Song_ArtistRelated", "Song_UploadFlag", "Song_Quality",
"Song_Attribute", "Song_PlayNum", "Song_DownNum",
"Song_MVPlayNum","Song_ArtistID","Song_CategoryID");
songQuery.setQuery(searchParameters.getSong_Name());
songQuery.setFilterQueries("Song_Attribute:2");

上面这些都是在设置查询参数,还有很多方法可以参看SolrJ wiki。

其实也可以不用查文档,因为都可以使用如下的形式:

songQuery.set("","");

比如设置查询的内容:

songQuery.set("q","Artist_Name:周杰伦")

q即为Url中的参数格式,所以也可以看到,SolrJ在查询时,其实核心也就是在拼字符串~~

简单解释一下几个常用的设置,setRows和setStart是天然的分页,可以设置返回多少行,从第多少个记录返回。

SetFields是需要返回的Field

SetQuery就是设置查询条件咯

SetFilterQueries就是设置过滤条件,比如上面的代码,就只返回Song_Attribute为2的记录。

解析搜索结果

//查询
QueryResponse response = solr.query(songQuery);
//总共查询到的记录数
Long RecordNum = response.getResults().getNumFound();
//查询到的结果
songList = response.getBeans(com.search.domain.Song.class);

这边的精华就是Solr提供JavaBean接收返回结果。但是前提是需要一个Bean实体类。

@Field
private Integer song_SongID;
@Field标注需要注入的Field @Field("Song_SongID")
public void setSong_SongID(Integer song_SongID) {
this.song_SongID = song_SongID;
}

上一段代码卸载Set方法中,用处就是如果你在Bean中不想使用和Solr索引库中相同的Field名,可以用这个标注需要将Song_SongID注入到你自己命名的变量中。

需要注意的是,使用Bean接收,返回的是实体类的List。

SolrJ的使用是不是很简单呢:),当然这只是一些基本的使用。

Request Handlers

每个request handler都是由Name和实现的class定义的。通过url可以访问对应的request handler。比如

http://localhost:8983/solr/collection1/select?q=solr

就会访问name为select的request handler。

所以Request Handler的作用也就明了了,request handler可以统一配置对某索引库的访问,其实也类似于filter,对请求进行统一配置,进行预处理,最典型的例子就是highlighting,可参见另一篇博客:六、Solr高亮与Field权重

之所以和SolrJ放在一块,就是因为Request Handler也可以配置一些共用的参数,如分页时,每次查询返回多少行,可以在name为Search的request handler里面配置。这样Solrj在访问时,就不必每次单独指定,还有比如DIH的配置。

其他很多handler的配置,可以参考文档。

五、SolrJ、Request Handler的更多相关文章

  1. 一、虚拟环境.二、路由配置主页与404.三、2.x路由分发.四、伪静态.五、request对象.六、FBV与CBV.七、文件上传.

    一.虚拟环境 ''' 解决版本共存 1. 用pycharm选择File点击NewProject然后选择virtualenv创建一个纯净环境 2. 打开下载的目录将venv文件夹下的所有文件(纯净的环境 ...

  2. 五、Request

    1.      Request 由于python函数所有变量都没有显示类型声明,特别是函数的输入参数,输出参数,因此在阅读代码时会造成比较大的困扰,比如大部分处理函数都有request输入参数,不同模 ...

  3. 爬虫学习(五)——使用handler管理器对象进行数据爬取的步骤

    # 使用管理器对象进行爬取数据的步骤 import urllib.requesturl = "https://www.baidu.com/"# 创建handler的管理器对象han ...

  4. 【SpringMVC笔记】第五课 改进Handler处理器和视图解析器

    第四课 已经对注解的映射器和适配器进行了改进. 接下来需要对Handler处理器和视图解析器进行改进. <!-- 配置handler处理器 --> <bean class=" ...

  5. JavaWeb学习笔记(五)—— request

    一.request概述 request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest.在客户端发出每个请求时,服务 ...

  6. 五:request和response的使用

    接着上一篇我们在搞完servlet的终极模式之后,接着就需要对发送的请求做出响应了 在这里,所谓的响应,都是返回页面的语言在浏览器上显示也就是HTML语言,所以返回的结果只有HTML语言才能在浏览器上 ...

  7. 五、request模块

    描述:requests是python的一个第三方HTTP(Hypertext Transfer Protocol,超文本传输协议)库,它比python自带的网络库urllib更加简单.方便和人性化:使 ...

  8. Servlet(五)----Request登录案例

    ##  案例:用户登录 准备工作: 准备Maven  配置pom.xml <?xml version="1.0" encoding="UTF-8"?> ...

  9. Python开发【第十五篇】:Web框架之Tornado

    概述 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了 ...

随机推荐

  1. 第一次启动MySQL时报错

    [root@localhost~]#/usr/local/webserver/mysql/bin/mysql_install_db --basedir=/usr/local/webserver/mys ...

  2. MYSQL Model报错:指定的存储区提供程序在配置中找不到 的解决

    开了项目发现没装mysql及mysql connector/.net.下了个最新版本,结果打开vs,进入模型edmx页面就出了这个问题. 刚开始以为是ProviderManifestToken版本的问 ...

  3. Mysql 5.7.9 cmake boost.cmake 处理

    环境Centos 6.7 x64 mininal 今天突然编译Mysql 5.7.9 按之前的cmake .的方式 发现报错了..提示 需要boost -- BOOST_INCLUDE_DIR /us ...

  4. 输入框 input只能输入正数和小数点

    输入框 input只能输入正数和小数点  限制文本框只能输入正数,负数,小数 onkeyup="value=value.replace(/[^\-?\d.]/g,'')" 限制文本 ...

  5. 阿里云服务器上使用iptables设置安全策略

    转自:http://www.netingcn.com/aliyun-iptables.html 公司的产品一直运行在云服务器上,从而有幸接触过aws的ec2,盛大的云服务器,最近准备有使用阿里云的弹性 ...

  6. Swagger 生成 ASP.NET Web API

    使用 Swagger 生成 ASP.NET Web API 在线帮助测试文档 原文:ASP.NET Web API Help Pages using Swagger作者:Shayne Boyer翻译: ...

  7. ssh 文件传输

    在linux下一般用scp这个命令来通过ssh传输文件. 1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地 ...

  8. wifi钓鱼教程

    关于 <原创>想钓鱼必须还要有好竿wifi学习教程+软件下载地址修正 因为最近网盘维护 导致资源无法下载 今天早上开通下载服务了大家可以放心下载. 蹭网要低调不要炫耀 软件介绍:Wires ...

  9. Spark 资源调度及任务调度

    1.  资源分配 通过SparkSubmit进行提交应用后,首先会创建Client将应用程序(字节码文件.class)包装成Driver,并将其注册到Master.Master收到Client的注册请 ...

  10. Sicily 1282. Computer Game

    题目地址:1282. Computer Game 思路: KMP算法,网上有很多资料,参考了一些网上的解题,收获很大,很感谢那些大神们!!! 通过这道题简单说说我对KMP算法的理解吧(大神们勿喷,虽然 ...