1. 安装&启动

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

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

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

启动例子

  1. bin/solr start e cloud noprompt
  2.  
  3. -e <example> Name of the example to run; available examples:
  4.  
  5. cloud: SolrCloud example
  6.  
  7. default: Solr default example
  8.  
  9. dih: Data Import Handler
  10.  
  11. schemaless: Schema-less example
  12.  
  13. multicore: Multicore
  14.  
  15. -noprompt 对输入不进行提示,接受所有默认输入

  

另外一种启动例子的方法

  1. cd example
  2. Java jar start.jar
  3. 所有的日志会打印在控制台

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

  1. 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)

  1. 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.

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

使用post.jar索引文件

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

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

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

4. 使用SolrJ操作solr

4.1 安装依赖包

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

参考目录:

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

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

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

  1. apache-solr-solrj-*.jar
  2. commons-codec-1.3.jar
  3. commons-httpclient-3.1.jar
  4. commons-io-1.4.jar
  5. jcl-over-slf4j-1.5.5.jar
  6. slf4j-api-1.5.5.jar
  7. slf4j-jdk14-1.5.5.jar

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

  1. solr-solrj-4.10.2.jar
  2. commons-codec-1.3.jar
  3. commons-io-1.4.jar
  4. jcl-over-slf4j.1.7.7.jar
  5. slf4j-api-1.5.6.jar
  6. slf4j-jdk14-1.5.6.jar
  7. httpclient-4.3.1.jar
  8. httpcore-4.3.jar
  9. httpmime-4.3.1.jar
  10. noggit-0.5.jar

这里面有两个坑:

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

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

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

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

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

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

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

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

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

  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/noggit/CharArr
  2. at org.apache.solr.common.util.JavaBinCodec.<init>(JavaBinCodec.java:590)
  3. at org.apache.solr.client.solrj.impl.BinaryResponseParser.processResponse(BinaryResponseParser.java:43)
  4. at org.apache.solr.client.solrj.impl.HttpSolrServer.executeMethod(HttpSolrServer.java:528)
  5. at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:210)
  6. at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:206)
  7. at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:124)
  8. at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:68)
  9. at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:54)
  10. at solr.data.tools.IndexDataTools.main(IndexDataTools.java:41)
  11. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  12. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  13. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  14. at java.lang.reflect.Method.invoke(Method.java:606)
  15. at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
  16. Caused by: java.lang.ClassNotFoundException: org.noggit.CharArr
  17. at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  18. at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  19. at java.security.AccessController.doPrivileged(Native Method)
  20. at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  21. at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  22. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  23. at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  24. ... 14 more

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

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

4.2 Solrj 添加索引

  1. SolrInputDocument:构造Solr文档对象
    在进行大数据索引时,最基础的办法就是依次构造该文档对象,然后添加到solr中。
  1. public static void main(String[] args) throws IOException, SolrServerException {
  2. String solrUrl = "http://localhost:8983/solr";
  3. HttpSolrServer server = new HttpSolrServer(solrUrl);
  4. server.setMaxRetries(1);
  5. server.setConnectionTimeout(5000);
  6. server.setSoTimeout(10000);
  7. server.setDefaultMaxConnectionsPerHost(100);
  8. server.setMaxTotalConnections(100);
  9. server.setFollowRedirects(false);
  10. server.setAllowCompression(true);
  11.  
  12. // String url = server.getBaseURL();
  13. SolrInputDocument doc1 = new SolrInputDocument();
  14. doc1.addField( "id", "id1", 1.0f );
  15. doc1.addField( "name", "doc1", 1.0f );
  16. doc1.addField( "price", 10 );
  17.  
  18. SolrInputDocument doc2 = new SolrInputDocument();
  19. doc2.addField( "id", "id2", 1.0f );
  20. doc2.addField( "name", "doc3", 1.0f );
  21. doc2.addField( "price", 20 );
  22.  
  23. Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
  24. docs.add( doc1 );
  25. docs.add(doc2);
  26.  
  27. server.add(docs);
  28. //*********************
  29. //set auto commit docs
  30. // UpdateRequest req = new UpdateRequest();
  31. // req.setAction( UpdateRequest.ACTION.COMMIT, false, false );
  32. // req.add( docs );
  33. // UpdateResponse rsp = req.process( server );
  34. //**********************
  35. server.commit();
  36. }

4.3 查询solr

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

QueryResponse: solr查询结果对象

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

  1. private String solrUrl = "http://localhost:8983/solr";
  2. public void querySolr(String queryStr) throws SolrServerException {
  3. HttpSolrServer server = new HttpSolrServer(solrUrl);
  4.  
  5. SolrQuery query = new SolrQuery();
  6. query.setRequestHandler("/select");
  7. query.setQuery("name:doc*");
  8. query.setSort("id", SolrQuery.ORDER.asc);
  9.  
  10. QueryResponse rsp = server.query(query);
  11.  
  12. Iterator<SolrDocument> iter = rsp.getResults().iterator();
  13. SolrDocumentList docList = rsp.getResults();
  14. List<BooksItem> beans = rsp.getBeans(BooksItem.class);
  15.  
  16. while(iter.hasNext()){
  17. SolrDocument doc = iter.next();
  18. String id = (String)doc.getFieldValue("id");
  19. String name = (String)doc.getFieldValue("name");
  20. System.out.print(
  21. "---id:"+id+"--name:"+name
  22. );
  23. Collection<String> names = doc.getFieldNames();
  24. for (String fName : names){
  25. java.lang.Object fValue = doc.getFieldValue(fName);
  26. boolean isString = fValue instanceof String;
  27. boolean isList = fValue instanceof ArrayList<?>;
  28. if (isString){
  29. fValue = (String)fValue;
  30. System.out.print("fieldName:"+fName+" filedValue:"+fValue+"\n");
  31. }
  32. if (isList){
  33. for (String s : (ArrayList<String>)fValue){
  34. System.out.print("fieldName:"+fName+" filedValue:"+String.valueOf(s)+"\n");
  35. }
  36. }
  37.  
  38. }
  39.  
  40. }
  41. }

  

  

  

【Solr初探】Solr安装,启动,查询,索引的更多相关文章

  1. Solr 08 - 在Solr Web管理页面中查询索引数据 (Solr中各类查询参数的使用方法)

    目录 1 Solr管理页面的查询入口 2 Solr查询输入框简介 3 Solr管理页面的查询方案 1 Solr管理页面的查询入口 选中需要查询的SolrCore, 然后在菜单栏选择[Query]: 2 ...

  2. lucene&solr学习——创建和查询索引(代码篇)

    1. Lucene的下载 Lucene是开发全文检索功能的工具包,从官网下载Lucene4.10.3并解压. 官网:http://lucene.apache.org/ 版本:lucene7.7.0 ( ...

  3. lucene&solr学习——创建和查询索引(理论)

    1.Lucene基础 (1) 简介 Lucene是apache下的一个开放源代码的全文检索引擎工具包.提供完整的查询引擎和索引引擎:部分文本分析引擎. Lucene的目的是为软件开发人员提供一个简单易 ...

  4. 【Solr】Solr的安装部署

    目录 Solr安装部署 Solr Web界面分析 回到顶部 solr安装和部署 solr下载 http://lucene.apache.org/ 安装solr,就是去部署它的war包,war包所在的位 ...

  5. Nutch搜索引擎(第2期)_ Solr简介及安装

    1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化 ...

  6. Solr使用初探——Solr的安装环境与配置

    Solr是一个apache名下很好用的开源索引.搜索工具,网上的资料虽多但很杂,笔者花了一天的时间对Solr进行了较为初步的研究,对Solr的基础应用做了一定的总结.文中涉及到的配置方法并不唯一,AP ...

  7. Nutch搜索引擎Solr简介及安装

    Nutch搜索引擎(第2期)_ Solr简介及安装   1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的 ...

  8. solr简介与安装

    solr简介: Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展,并对索引 ...

  9. solr window环境安装配置和管理页面基本使用

    solr介绍 来自官网http://lucene.apache.org/solr/解释: Solr is highly reliable, scalable and fault tolerant, p ...

随机推荐

  1. .net Signalr 使用笔记

    官方参考地址:http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host 1.服务器端可以是控制台.winfor ...

  2. java学习笔记(4):内存管理

    在内存的方面,Java自身带有垃圾运行机制,表面上好像我们可以忽略不计,但是如果我们对其加以理解的话,说不定有时会达到事半功倍的效果. 所以自己花些时间整理一些此类的资料. 一.基本概念 1.栈 对于 ...

  3. eclipse项目显示标尺

    Windows-Preferences-General-Editors-Text Editors-Show line numbers

  4. sass转换为css

    sass安装的方法参考官网:http://www.w3cplus.com/sassguide/ SASS文件转换为CSS文件的方法: 首先输出 F: 代表找到F盘 : 然后输出cd sass 代表找到 ...

  5. jquery1.9学习笔记 之层级选择器(一)

    子选择器(“parent > child”) 描述:选择所有父元素的直系子元素. 例子: <!doctype html> <html lang='zh'> <hea ...

  6. R语言学习网站

    一个不错的个人R语言博客网站 http://blog.fens.me/r-overview/

  7. MySQL flush tables with read lock

    mysql> flush tables with read lock; flush tables with read lock 会去关闭已经打开的所有文件,它要做这个操作就先要拿到锁:当发起这个 ...

  8. Delphi事件列表赏析(38个事件,必须要对这些事件非常熟悉,才能如臂使指,才能正确发布到新控件!)

    我把Delphi常用的几个类的事件都收集齐了,并一一加以注释.原因是在自定义的过程中,看到那堆长长的事件列表感到头晕,但是如果不发布这些事件的话,更是暴殄天物.所以关键还是要对这些事件非常熟悉,才能不 ...

  9. b/s客户端和服务器的交互(转)

    原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作为一个软件开发者,你一定会对网络应用如何工作有 ...

  10. scriptol图像处理算法

    神奇的图像处理算法   相似图片搜索是利用数学算法,进行高难度图像处理的一个例子.事实上,图像处理的数学算法,已经发展到令人叹为观止的地步. Scriptol列出了几种神奇的图像处理算法,让我们一起来 ...