博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Solr初探】Solr安装,启动,查询,索引
阅读量:6245 次
发布时间:2019-06-22

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

1. 安装&启动

官网:http://lucene.apache.org/solr/

下载源代码,解压,进入根目录(我把solr放在/usr/local/solr下)

在/usr/local/solr/example中,有一些例子

启动例子

bin/solr start –e cloud –noprompt-e 
Name of the example to run; available examples: cloud: SolrCloud example default: Solr default example dih: Data Import Handler schemaless: Schema-less example multicore: Multicore-noprompt 对输入不进行提示,接受所有默认输入

  

另外一种启动例子的方法

cd exampleJava –jar start.jar所有的日志会打印在控制台

在浏览器中输入以下地址,打开solr管理界面

http://localhost:8983/solr

 

2. 使用工具快速索引文档

以下命令均在命令行中完成,需要指定-classpath的,即指定solr-core-version.jar的路径

(我的在/usr/local/solr/example目录下执行

java -classpath dist/solr-c -Dauto -Drecursive org.apache.solr.util.SimplePostTool docs/

索引docs目录下的所有文件(当前目录/usr/local/solr/example)

java -Dauto -Drecursive org.apache.solr.util.SimplePostTool docs/

索引xml、json

在索引json时,需要指定 auto参数,因为SimplePostTool默认索引的是xml文档

Because the SimplePostTool defaults to assuming files are in Solr XML format, the -Dauto switch is used to post JSON files so that it uses the appropriate content type.

java org.apache.solr.util.SimplePostTool example/exampledocs/*.xml
java -Dauto org.apache.solr.util.SimplePostTool example/exampledocs/books.csv
java -Dauto org.apache.solr.util.SimplePostTool example/exampledocs/books.json

使用post.jar索引文件

java -jar example/exampledocs/post.jar example/exampledocs/hd.xml

 

3. 停止solr、清空节点数据

bin/solr stop -all ; rm -Rf node1/ node2/

 

4. 使用SolrJ操作solr

4.1 安装依赖包

SolrJ是一套操作solr的java API包,官网如下:

参考目录:

http://wiki.apache.org/solr/SolrQuerySyntax

使用SolrJ前,官网说明需要依赖如下包:

•	apache-solr-solrj-*.jar•	commons-codec-1.3.jar•	commons-httpclient-3.1.jar •	commons-io-1.4.jar•	jcl-over-slf4j-1.5.5.jar •	slf4j-api-1.5.5.jar•	slf4j-jdk14-1.5.5.jar

实际操作中,在IntelliJ IDEA中,编写操作solr的代码,需要的不止这几个包,我的jar包如下:

•	solr-solrj-4.10.2.jar •	commons-codec-1.3.jar•	commons-io-1.4.jar•	jcl-over-slf4j.1.7.7.jar•	slf4j-api-1.5.6.jar•	slf4j-jdk14-1.5.6.jar•	httpclient-4.3.1.jar •	httpcore-4.3.jar•	httpmime-4.3.1.jar•	noggit-0.5.jar

这里面有两个坑:

  一:使用maven的pom.xml来管理包的时候,下载的包经常是不可用的(损坏),但是maven检测不到。这个是我碰到的,最后是在solr安装目录下,搜索找到对应的jar包,手动添加的工程中。

  二:官网给的依赖包不太全,可能并不是针对独立项目,这点我也不太明白,我自己试验是有上面几个包就够了。

 

在尝试使用solrJ可能使用的错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest	at solrX.IndexDataTools.main(IndexDataTools.java:115)Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest	at java.net.URLClassLoader$1.run(URLClassLoader.java:366)	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)	at java.security.AccessController.doPrivileged(Native Method)	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)	at java.lang.ClassLoader.loadClass(ClassLoader.java:425)	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)	... 1 more

 上面的解法:添加httpclient-4.1.4.jar

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/entity/mime/content/ContentBodyCaused by: java.lang.ClassNotFoundException: org.apache.http.entity.mime.content.ContentBody

上面的解法:添加 httpmime-4.2.3.jar

Exception in thread "main" java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory	at org.slf4j.LoggerFactory.staticInitialize(LoggerFactory.java:83)	at org.slf4j.LoggerFactory.
(LoggerFactory.java:73) at org.apache.solr.client.solrj.impl.HttpSolrServer.
(HttpSolrServer.java:91) at solrX.IndexDataTools.main(IndexDataTools.java:115)

上面的解法:slf4j-api-1.5.6.jar

Exception in thread "main" java.lang.NoClassDefFoundError: org/noggit/CharArr	at org.apache.solr.common.util.JavaBinCodec.
(JavaBinCodec.java:590) at org.apache.solr.client.solrj.impl.BinaryResponseParser.processResponse(BinaryResponseParser.java:43) at org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:528) at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:210) at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:206) at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:124) at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:68) at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:54) at solr.data.tools.IndexDataTools.main(IndexDataTools.java:41) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)Caused by: java.lang.ClassNotFoundException: org.noggit.CharArr at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 14 more

上面的解法:添加noggit-0.5.jar

 以上异常请同时参考:http://blog.sina.com.cn/s/blog_5ddc071f0101mtpf.html

4.2 Solrj 添加索引

SolrInputDocument:构造Solr文档对象 在进行大数据索引时,最基础的办法就是依次构造该文档对象,然后添加到solr中。
public static void main(String[] args) throws IOException, SolrServerException {        String solrUrl = "http://localhost:8983/solr";        HttpSolrServer server = new HttpSolrServer(solrUrl);        server.setMaxRetries(1);        server.setConnectionTimeout(5000);        server.setSoTimeout(10000); server.setDefaultMaxConnectionsPerHost(100); server.setMaxTotalConnections(100); server.setFollowRedirects(false); server.setAllowCompression(true); // String url = server.getBaseURL(); SolrInputDocument doc1 = new SolrInputDocument(); doc1.addField( "id", "id1", 1.0f ); doc1.addField( "name", "doc1", 1.0f ); doc1.addField( "price", 10 ); SolrInputDocument doc2 = new SolrInputDocument(); doc2.addField( "id", "id2", 1.0f ); doc2.addField( "name", "doc3", 1.0f ); doc2.addField( "price", 20 ); Collection
docs = new ArrayList
(); docs.add( doc1 ); docs.add(doc2); server.add(docs); //********************* //set auto commit docs // UpdateRequest req = new UpdateRequest(); // req.setAction( UpdateRequest.ACTION.COMMIT, false, false ); // req.add( docs ); // UpdateResponse rsp = req.process( server ); //********************** server.commit(); }

4.3 查询solr

SolrQuery: 构建solr查询对象,设置查询的属性

QueryResponse: solr查询结果对象

SolrDocumentList: solr查询结果对象包含的结果对象

private String solrUrl = "http://localhost:8983/solr";    public void querySolr(String queryStr) throws SolrServerException {        HttpSolrServer server = new HttpSolrServer(solrUrl);        SolrQuery query = new SolrQuery();        query.setRequestHandler("/select");        query.setQuery("name:doc*"); query.setSort("id", SolrQuery.ORDER.asc); QueryResponse rsp = server.query(query); Iterator
iter = rsp.getResults().iterator(); SolrDocumentList docList = rsp.getResults(); List
beans = rsp.getBeans(BooksItem.class); while(iter.hasNext()){ SolrDocument doc = iter.next(); String id = (String)doc.getFieldValue("id"); String name = (String)doc.getFieldValue("name"); System.out.print( "---id:"+id+"--name:"+name ); Collection
names = doc.getFieldNames(); for (String fName : names){ java.lang.Object fValue = doc.getFieldValue(fName); boolean isString = fValue instanceof String; boolean isList = fValue instanceof ArrayList
; if (isString){ fValue = (String)fValue; System.out.print("fieldName:"+fName+" filedValue:"+fValue+"\n"); } if (isList){ for (String s : (ArrayList
)fValue){ System.out.print("fieldName:"+fName+" filedValue:"+String.valueOf(s)+"\n"); } } } } }

 

博客同步地址:http://www.cnblogs.com/SEEKTHINKING/p/4228935.html

  

  

 

转载于:https://www.cnblogs.com/bicoffee/p/4229112.html

你可能感兴趣的文章
core文件的生成
查看>>
Python--day48--ORM框架SQLAlchemy
查看>>
图形报表部署在Linux下出现乱码解决办法
查看>>
(转)求模和求余
查看>>
异常解决com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
查看>>
DateTable导出添加时间段
查看>>
【Dart学习】-- Dart之消息循环机制[翻译]
查看>>
埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 I题 二数...
查看>>
【转】浅谈Java中的hashcode方法(这个demo可以多看看)
查看>>
Super Ugly Number
查看>>
LeetCode – Refresh – Linked List Cycle II
查看>>
设计模式第三次作业
查看>>
Iterator<Entry<String,String>> iter=map.entrySet().iterator(); 是什么意思
查看>>
VM各寄存器作用
查看>>
jupyter Notebook环境搭建
查看>>
python文件上传的三种方式
查看>>
python基础学习18----面向对象简述
查看>>
Android Browser学习三 多窗口: 展示第一个Tab的过程
查看>>
java资源下载之官网地址
查看>>
学习java字符串编码总结
查看>>