Solr之java操作
参考教程:
http://www.cnblogs.com/xia520pi/p/3625232.html
http://www.cnblogs.com/hujunzheng/p/5647896.html
sorl不提供更新,所有的更新都是先删除后插入
https://www.cnblogs.com/xuyiqing/p/8707966.html
solr的安装
如果没配置环境变量JAVA_HOME和PATH,则先配置,指向JDK1.8环境;解压solr;命令行进入solr的bin目录,执行solr.cmd start,命令窗口不要关;浏览器打开http://127.0.0.1:8983/。这是以集成的jetty服务器方式去运行。还可以部署到tomcat上。
2、创建电驴数据的core
1)server\solr\创建文件夹movies
2)把solor的server\solr\configsets\basic_configs下的conf拷贝到server\solr\movies下
创建core(名字movies),相当于表:
3)浏览器中打开solr控制台“Core Admin”→【Add core】,name和instanceDir都填movies,其他保持默认值。
4)创建字段:打开movies这个core,Add Field,增加相应的字段(id是内置的不用建,string类型): title、 ed2k、 content。stored代表“保存原始数据”(后续搜索的时候可以读取出来)、indexed代表“进行索引保存”(可以根据这个字段进行搜索)。
搜索引擎:插入
1、solrj.jar(在solr的dist下)是solr提供的用来连接solr执行数据插入、查询的开发包。 solrj.jar依赖于httpcore-4.4.4、httpclient-4.5.2、、httpmime-4.5.2、commons-io,位于solrj-lib中
2、创建连接:
HttpSolrClient.Builder builder = new HttpSolrClient.Builder ("http://127.0.0.1:8983/solr/movies");
HttpSolrClient solr = builder.build();
一个文档(相当于数据库的行)对应一个SolrInputDocument 对象,
3、调用SolrInputDocument的setField(“title”, title);来设置字段的值;调用HttpSolrClient 的add方法将SolrInputDocument 加入solr服务器;
4、调用HttpSolrClient 的close方法关闭连接;
5、删除文档:调用HttpSolrClient 的deleteById:根据Id删除; deleteByQuery()根据查询条件删除;
搜索引擎:搜索
1、 SolrQuery query = new SolrQuery();是查询条件
2、 SolrQuery query = new SolrQuery();
query.setQuery(“description:\”王宝强\””);// description字段中包含”王宝强”的
QueryResponse resp = solr.query(query);
SolrDocumentList list = resp.getResults();
3、查询语法,支持AND、OR、NOT(必须是大写的),支持()运算符。
1)、title:杨中科 是只要title中有“杨中科”任何一个的都匹配,如果想完全匹配的就用 title:"杨中科"
2)、范围比较。age在3到5之间的: Age:[3 TO 5]。age大于5的 Age:[5 TO *]
4、排序:
solrQuery.setSort("area", ORDER.desc);
5、分页查询:
solrQuery.setStart(起始行数 0开始);//limit 5,10
solrQuery.setRows(取的条数);
QueryResponse的getResults()为当前页查询的数据;
SolrDocumentList的getNumFound()为查询结果总条数;
代码演示
package com.mf.solrProject; import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import javax.xml.transform.SourceLocator; import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument; public class Main1 { public static void main4(String[] args) throws SolrServerException, IOException {
HttpSolrClient.Builder builder =
new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/movies");
HttpSolrClient solrClient = builder.build(); SolrQuery query = new SolrQuery("content:\"马蓉\" OR title:\"马蓉\"");
//query.setSort("age", ORDER.desc);
query.setStart(0);
query.setRows(10);
QueryResponse resp = solrClient.query(query);
SolrDocumentList docList = resp.getResults();
/*
docList.getNumFound()//总的查询结果条数
docList.size();//当前页的条数*/ for(SolrDocument doc : docList)
{
String id = (String)doc.get("id");
String content = (String)doc.get("content");
String title = (String)doc.get("title");
String ed2k = (String)doc.get("ed2k");
System.out.println(title);
}
solrClient.close();
} public static void main(String[] args) throws ClassNotFoundException, SQLException, SolrServerException, IOException {
HttpSolrClient.Builder builder =
new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/movies");
HttpSolrClient solrClient = builder.build(); Class.forName("org.sqlite.JDBC");
Connection sqliteConn =
DriverManager.getConnection("jdbc:sqlite:E:/专业课/自己动手写搜索引擎/verycd.sqlite3.db");
PreparedStatement ps = sqliteConn.prepareStatement("select * from verycd");
ResultSet rs = ps.executeQuery();
int i=0;
while(rs.next())
{
int id = rs.getInt("verycdid");
String title = rs.getString("title");
String ed2k = rs.getString("ed2k");
String content = rs.getString("content");
//System.out.println(title);
//System.out.println("id="+id);
System.out.println(i++); SolrInputDocument doc = new SolrInputDocument();
doc.setField("id", id);
doc.setField("title", title);
doc.setField("ed2k", ed2k);
doc.setField("content",content);
solrClient.add(doc);//insert
}
sqliteConn.close();// solrClient.commit();
solrClient.close();
} public static void main1(String[] args) {
HttpSolrClient.Builder builder =
new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/movies");
HttpSolrClient solrClient = builder.build();
try
{
SolrInputDocument doc = new SolrInputDocument();
doc.setField("id", "1");
doc.setField("title", "泰坦尼克号");
doc.setField("ed2k", "ed2:///aaaaaaaaaa.avi/fadfsafadsfasfdadsf");
doc.setField("content", "《泰坦尼克号》是美国20世纪福克斯公司和派拉蒙影业公司共同出资,于1994年拍摄的一部浪漫的爱情灾难电影,由詹姆斯·卡梅隆创作、编辑、制作、导演及监制,莱昂纳多·迪卡普里奥、凯特·温斯莱特主演。影片于1997年11月1日在东京首映。");
solrClient.add(doc);//insert
solrClient.commit();
//solrClient.deleteByQuery("content:\"爱情\"");
} catch (SolrServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try {
solrClient.close();
} catch (IOException e) { }
}
} }
Solr之java操作的更多相关文章
- Solr 14 - SolrJ操作SolrCloud集群 (Solr的Java API)
目录 1 pom.xml文件的配置 2 SolrJ操作SolrCloud 1 pom.xml文件的配置 项目的pom.xml依赖信息请参照: Solr 09 - SolrJ操作Solr单机服务 (So ...
- Solr之java实现增删查操作
1.添加pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- solr的客户端操作:使用solrj进行curd操作
导入相关的jar包 <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-s ...
- Java操作Sqlite数据库-jdbc连接
Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...
- 【MongoDB for Java】Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...
- Java操作Oracle
public class DBCon { // 数据库驱动对象 public static final String DRIVER = "oracle.jdbc.driver.OracleD ...
- JAVA操作ORACLE数据库的存储过程
一.任务提出 JAVA操作oracle11g存储过程实验需要完成以下几个实例: 1.调用没有返回参数的过程(插入记录.更新记录) 2.有返回参数的过程 3.返回列表的过程 4.返回带分页的列表的过程. ...
- JAVA操作MongoDB数据库
1. 首先,下载MongoDB对Java支持的驱动包 驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads 2.Java操作Mo ...
- Java操作Session与Cookie
1,Java操作Session Java操作Session非常简单,步骤如下 1.1,在servlet中通过request获取session HttpSession session = request ...
随机推荐
- 关于WrapPanel和RadioButton相互配合使用实WrapPanel现动态添加或删除项
最近在做一个项目的时候,有一个需求就是,通过RadioButton来控制一行内容的显示与不显示,当不显示的时候,下面的项能够占住相应的位置,当增加的时候,又会在原来的位置重新显示,如果使用一般的Gri ...
- spring学习总结(一)_Ioc基础(中)
本篇文章继续上篇文章讲解Ioc基础,这篇文章主要介绍使用spring注解配置Ioc 上篇文章主要是通过xml配置文件进行Ioc的配置.这次进行改造下,通过注解进行配置 首先先看一个简单的demo 简单 ...
- 什么样的 GitHub 才适合放简历上?
为什么 GitHub 可以加分? 很多招聘描述上面都会备注 GitHub 是加分项,那么为什么它是加分项呢? 停,如果看到这里你还不知道 GitHub 是什么,可以看一下 Phodal的手记:http ...
- html 塊 div span
塊級元素:元素結束后,另起一行:如p,table,h1,ul,ol 內聯元素:元素結束后,不會另起一行:如a,td.image.b <div>是塊級元素,div本身沒有含義,div是htm ...
- fix
rounds the elements of A toward zero, resulting in an array of integers. For complex A, the imaginar ...
- AWS、Azure和Google的云容器注册表有什么区别?
亚马逊云计算服务(AWS).谷歌云服务和微软Azure,这三大公共云平台都提供Docker容器注册表.虽然他们的产品看起来很相似,但开发人员在做出选择之前,应该先了解价格和功能方面的差异. 公共云供应 ...
- ref、out与params
ref 把值传递转换为引用传递,侧重于将一个值带到函数中进行改变,再将改变后的值带出去,ref参数在函数外必须为ref参数赋值 ; AddSalary(ref salary); //如果不写ref,s ...
- BZOJ1251序列终结者——非旋转treap
题目描述 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技 ...
- BZOJ 4806 - 4809 象棋四题
4806: 炮 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 103 Solved: 72[Submit][Status][Discuss] Des ...
- WC 2019 记
“在下一次挑战来临时,还能否有足够的勇气和力量重新提起这被震掉两次的剑呢?” 难得来参加一次$WC$,这是第一次来,也很有可能是最后一次了(我也好希望有下一次啊,哪怕这可能再渺小,如同浩瀚星空中一丝辰 ...