【Solr初探】Solr安装,启动,查询,索引

1. 安装&启动

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

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

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

启动例子

bin/solr start –e cloud –noprompt

-e <example>  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 example
Java –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/Solrj

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/ContentBody
Caused 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.<clinit>(LoggerFactory.java:73)
	at org.apache.solr.client.solrj.impl.HttpSolrServer.<clinit>(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.<init>(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<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
        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<SolrDocument> iter = rsp.getResults().iterator();
        SolrDocumentList docList = rsp.getResults();
        List<BooksItem> 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<String> 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<String>)fValue){
                        System.out.print("fieldName:"+fName+"  filedValue:"+String.valueOf(s)+"\n");
                    }
                }

            }

        }
    }

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

  

  

时间: 2024-10-06 19:51:40

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

solr 的客户端调用solrj 建索引+分页查询

一.利用SolrJ操作solr API 使用SolrJ操作Solr会比利用httpClient来操作Solr要简单.SolrJ是封装了httpClient方法,来操作solr的API的.SolrJ底层还是通过使用httpClient中的方法来完成Solr的操作. 需要的包如下: 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使用初探——Solr的安装环境与配置

Solr是一个apache名下很好用的开源索引.搜索工具,网上的资料虽多但很杂,笔者花了一天的时间对Solr进行了较为初步的研究,对Solr的基础应用做了一定的总结.文中涉及到的配置方法并不唯一,API的用法也未必规范,仅希望能够通过此文让大家对solr更快的入手. 一.Solr的安装环境与配置: 1.  下载所需软件,安装配置Tomcat 首先下载Tomcat与Solr,Tomcat可在各软件网站下载得到,Solr下载地址如下: http://mirror.bjtu.edu.cn/apache

Solr入门-Solr服务安装(windows系统)

安装Solr 首先保证已经正确安装了Java 下载Solr,当前最新版6.1.0 Solr各个版本下载地址 Solr从6.0之后需要Java1.8所以如果使用Solr6.0及其以上版本,请确保Java版本在1.8之上 将Solr下载之后解压在电脑的某个目录,我解压到了D盘根目录下 启动Solr 启动Solr(windws版,以下都是windows下的) 进入solr的解压目录 cd bin solr.cmd start Solr启动成功! 管理控制台地址为 http://localhost:89

基于Solr的HBase多条件查询测试

转自:http://www.cnblogs.com/chenz/articles/3229997.html 背景: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级的快速检索,对于多字段的组合查询却无能为力.针对HBase的多条件查询也有多种方案,但是这些方案要么太复杂,要么效率太低,本文只对基于Solr的HBase多条件查询方案进行测试和验证. 原理: 基于Solr的HBase多条件查询原理很简单,将HBas

基于Solr的多表join查询加速方法

前言 DT时代对平台或商家来说最有价值的就是数据了,在大数据时代数据呈现出数据量大,数据的维度多的特点,用户会使用多维度随意组合条件快速召回数据.数据处理业务场景需要实时性,需要能够快速精准的获得到需要的数据.之前的通过数据库的方式来处理数据的方式,由于数据库的某些固有特性已经很难满足大数据时代对数据处理的需求. 所以,在大数据时代使用hadoop,hive,spark,作为处理离线大数据的补充手段已经大行其道. 以上提到的这些数据处理手段,只能离线数据处理方式,无法实现实时性.Solr作为补充

zookeeper和solr搭建集群分片查询

这几天双十一弄得不要不要的.各种困.出差有一些时间.晚上回头摆弄摆弄.白天不忙就是找个地方想想写写.就这样一周多过去了.好了.不扯了入正题. 1 .环境搭建 MacBook pro 15款840 OS X 10.10.5 solr-5.2.1.tgz zookeeper-3.4.6.tar.gz VMWare Fusion8 Centos 6.7 2 .搭建solr集群. 在之前说过zookeeper集群的搭建,所以在这就别啰嗦了.基本是一样的.不过因为之前搭建过rabbitmq集群,改了一些配

基于Solr的HBase多条件查询

基于Solr的HBase多条件查询——转载: 背景: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级的快速检索,对于多字段的组合查询却无能为力. 针对HBase的多条件查询也有多种方案,但是这些方案要么太复杂,要么效率太低,本文只对基于Solr的HBase多条件查询方案进行测试和验证. 原理: 基于Solr的HBase多条件查询原理很简单,将HBase表中涉及条件过滤的字段和rowkey在Solr中建立索引,

Solr 1.3 安装步骤

可以通过以下三种方式之一设置   Solr   的主位置: 1.设置   java   系统属性   solr.solr.home   (没错,就是  solr.solr.home).    2.配置   java:comp/env/solr/home   的一个   JNDI   查找指向  solr   目录.    3.在包含   solr   目录的目录中启动   servlet   容器.(默认的   Solr   主目录是当前工作目录下的   solr.) 我采用的是第二种(2.配置

【Solr】——Solr7安装教程

前提 solr已经升级7.1,但是我们公司的solr还是使用的4.4,你们说low不low!!!重要的是,人家花费了大气将solr升级,从技术的角度来说solr7比solr4那是翻天覆地的改变! solr7.1安装 solr7.1官方下载地址 在solr5以前solr的启动都有tomcat作为容器,但是从solr5以后solr内部集成jetty服务器,可以通过bin目录中脚本直接启动.就是从solr5以后跟solr4最大的区别是被发布成一个独立的应用. 在solr5之后solr其实特别容易安装,