`
brandNewUser
  • 浏览: 457056 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Solr入门

阅读更多
 
由于现公司要强化一下搜索相关的功能,特对Solr及Lucene进行简要的研究,并做一些个人总结。 
 
Solr采用Lucene搜索库为核心,提供全文索引和搜索的开源企业平台,提供REST的HTTP/XML和JSON的API。
 
Solr项目的英文主页:http://lucene.apache.org/solr/,其中介绍了Solr的基本情况:Solr is highly reliable, scalable and fault tolerant, providing distributed indexing, replication and load-balanced querying, automated failover and recovery, centralized configuration and more. Solr powers the search and navigation features of many of the world's largest internet sites.
 

1. 下载并开始启动系统

 
我们可以从教程中的起始页面中开始我们的solr探索之旅:http://lucene.apache.org/solr/quickstart.html
 
将solr的jar包解压后,就可以在/bin目录下启动solr,执行命令后的结果为:
 
./solr start -e cloud -noprompt

Welcome to the SolrCloud example!

Starting up 2 Solr nodes for your example SolrCloud cluster.

Creating Solr home directory /Users/mazhiqiang/develop/tools/solr-5.5.0/example/cloud/node1/solr
Cloning /Users/mazhiqiang/develop/tools/solr-5.5.0/example/cloud/node1 into
   /Users/mazhiqiang/develop/tools/solr-5.5.0/example/cloud/node2

Starting up Solr on port 8983 using command:
/Users/mazhiqiang/develop/tools/solr-5.5.0/bin/solr start -cloud -p 8983 -s "/Users/mazhiqiang/develop/tools/solr-5.5.0/example/cloud/node1/solr"

Waiting up to 30 seconds to see Solr running on port 8983 [/]  
Started Solr server on port 8983 (pid=2835). Happy searching!


Starting up Solr on port 7574 using command:
/Users/mazhiqiang/develop/tools/solr-5.5.0/bin/solr start -cloud -p 7574 -s "/Users/mazhiqiang/develop/tools/solr-5.5.0/example/cloud/node2/solr" -z localhost:9983

Waiting up to 30 seconds to see Solr running on port 7574 [/]  
Started Solr server on port 7574 (pid=2931). Happy searching!


Connecting to ZooKeeper at localhost:9983 ...
Uploading /Users/mazhiqiang/develop/tools/solr-5.5.0/server/solr/configsets/data_driven_schema_configs/conf for config gettingstarted to ZooKeeper at localhost:9983

Creating new collection 'gettingstarted' using command:
http://localhost:8983/solr/admin/collections?action=CREATE&name=gettingstarted&numShards=2&replicationFactor=2&maxShardsPerNode=2&collection.configName=gettingstarted

{
  "responseHeader":{
    "status":0,
    "QTime":6977},
  "success":{"":{
      "responseHeader":{
        "status":0,
        "QTime":6686},
      "core":"gettingstarted_shard2_replica2"}}}

Enabling auto soft-commits with maxTime 3 secs using the Config API

POSTing request to Config API: http://localhost:8983/solr/gettingstarted/config
{"set-property":{"updateHandler.autoSoftCommit.maxTime":"3000"}}
Successfully set-property updateHandler.autoSoftCommit.maxTime to 3000


SolrCloud example running, please visit: http://localhost:8983/solr
 
 
通过控制台中的输出内容,或者查看jps可以发现,solr启动了两个进程,分别对应两个端口8983,以及7574:
 
jps -ml
2835 start.jar -XX:OnOutOfMemoryError=/Users/mazhiqiang/develop/tools/solr-5.5.0/bin/oom_solr.sh 8983 /Users/mazhiqiang/develop/tools/solr-5.5.0/example/cloud/node1/solr/../logs --module=http
2931 start.jar -XX:OnOutOfMemoryError=/Users/mazhiqiang/develop/tools/solr-5.5.0/bin/oom_solr.sh 7574 /Users/mazhiqiang/develop/tools/solr-5.5.0/example/cloud/node2/solr/../logs --module=http
344 
3004 sun.tools.jps.Jps -ml
 
 
可以在服务器的对应端口上,查看到solr的example页面:http://localhost:8983/solr/#/
 


 
 
 
同样,如果将端口换成7574页面与8983一致。
 
也可以在cloud tab中看到整体结构图,solr运行在两个节点上:
 


 
 

2.索引数据(Indexing Data)

 
系统启动完成后,solr server就已经在后台运行了,但是其中什么数据都没有。Solr在bin目录中提供了一个post工具,用于一开始就帮助方便地向solr中添加各种类型的documents。
 
可以使用post工具来处理类似html, pdf, ms-office, plain text等各种格式的文本,可以根据目录去递归爬取文件至Solr,用于抽取(extraction)和索引(indexing)。
 
调用bin/post -c gettingstarted docs/ 来加入所有docs目录下的文档,在控制台中输出如下:
 
bin/post -c gettingstarted docs/

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/bin/java -classpath /Users/mazhiqiang/develop/tools/solr-5.5.0/dist/solr-core-5.5.0.jar -Dauto=yes -Dc=gettingstarted -Ddata=files -Drecursive=yes org.apache.solr.util.SimplePostTool docs/
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/gettingstarted/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
Entering recursive mode, max depth=999, delay=0s
Indexing directory docs (3 files, depth=0)
POSTing file index.html (text/html) to [base]/extract
POSTing file quickstart.html (text/html) to [base]/extract
POSTing file SYSTEM_REQUIREMENTS.html (text/html) to [base]/extract
Indexing directory docs/changes (1 files, depth=1)
POSTing file Changes.html (text/html) to [base]/extract
Indexing directory docs/images (0 files, depth=1)
Indexing directory docs/solr-analysis-extras (8 files, depth=1)
 
 
可以看出,是根据目录去逐层Indexing,并POSTing至Solr中,直至所有的文档都已经处理完成,共处理约4000个文件。
 
POSTing file VelocityResponseWriter.html (text/html) to [base]/extract
Indexing directory docs/solr-velocity/resources (0 files, depth=2)
3937 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update...
Time spent: 0:01:12.141
 
 
注意,这里的-c gettingstarted为索引的集合名称(暂时不知道干什么用的)。
 
在上一步已经执行完成后,就可以在搜索页面中进行查询(其中需要带上collection的名称),并查询出结果:
 
 
具体查询的方式可以看solr相关的wiki,可以独立一篇详细研究。
 
也可以通过collection的browse方式来查询出所有的POSTing过去的数据:
 
 
除了可以索引这些通用的文档数据类型,solr还支持索引XML(称之为Solr Xml),JSON(称之为Solr JSON),CSV文件(用逗号,停顿分列的值)。这些文件类型都是solr默认支持的,此外还提供几种其他的方式来indexing数据:
 
  • Import records from a database using the Data Import Handler (DIH);如果需要导入数据库的记录,使用DIH;
  • Use SolrJ from JVM-based languages or other Solr clients to programatically create documents to send to Solr;如果需要从基于JVM的语言或其他Solr客户端自动程序化地创建文档,使用SolrJ;
  • Use the Admin UI core-specific Documents tab to paste in a document to be indexed, or select Document Builder from the Document Type dropdown to build a document one field at a time. Click on the Submit Document button below the form to index your document;可以选择从Solr的文档中心中粘贴Documents的方式来indexing数据,例如:http://localhost:8983/solr/#/gettingstarted_shard2_replica1/documents
 
 

3.更新数据

 
可以注意到,即使你将index的内容重复操作,执行多次,对于最终的结果而言,也不会重复,这是因为我们启动的solr example项目的配置文件中:
 
solr-5.5.0/example/files/conf/managed-schema
 
 
已经指定了uniqueKey作为最终的id;而当你POST一个新的文档至Solr中试图index同样的uniqueKey时,会自动进行替换的操作。
 
 
 

4.删除数据

 
 
可以通过POST命令的方式,指定要删除的unique key字段,或是指定一个查询条件来匹配多个文档(如果这样操作的话,要多加小心!)。
 
可以调用下面的命令从gettingstarted collection删除指定id的数据:
 
/bin/post -c gettingstarted -d “<delete><id>1212312312dfasfd</id></delete>"
 
 

5.执行搜索

 
Solr可以通过多种方式进行查询操作,比如Rest客户端,curl, wget, Chrome POSTMAN,以及通过各种编程语言的客户端来进行查询操作。
 
Solr Admin UI包含了一个查询构建接口编辑器,启动Solr的相关地址为:
 
 
如果使用默认的条件查询,不用输入任何条件,此时就会默认返回10条记录,用json的格式:
 


 
 
在右上的顶部会自动将请求的url填写上去,如果在Linux/Mac上使用curl工具,可以给同样的url来进行查询工作,例如:
 
curl "http://localhost:8983/solr/gettingstarted_shard1_replica1/select?q=*%3A*&wt=json&indent=true"
 
 
q字段也就是查询使用的字段:
 
  • 如果设置为*:*,表示不过滤任何字段,全部查询出来;
  • 如果设置为foundation,表示只要文档中包含foundation,就查询出来;
  • 如果设置为name:foundation,指的是匹配名称name为foundation的文档,如果name这个字段并没有设置(所有文档都没有这个属性),则出现错误;
  • 如果要查询一个短语,其中包含多个词,可以使用q=CAS+foundation的方式,表示查询的字段为“CAS foundation”;
  • 如果要限制查询出来的字段仅包含某个或某几个属性,使用fl字段,例如fl=id,多个可以用逗号分隔;
  • 如果需要搜索既包含one又包含two的文档,可以使用+前缀,q=%2Bone+%2Btwo(由于加号在q字段中表示空格,因此需要转义);反之,如果需要搜索到包含one但不包含two的文档,使用-前缀,q=%2Bone+-two;
 
如果需要更加深入地了解solr中的查询,可以参考solr关于查询的wiki:https://cwiki.apache.org/confluence/display/solr/Searching
 

6.清理

 
我们刚才导入了很多的数据,如果需要从初始环境开始,那么就需要对当前的环境进行清理,并删除Index进来的所有数据:
 
bin/solr stop -all;
rm -Rf example/cloud/ 
 
 
<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

Solr脚本选项

 
可以使用bin/solr脚本工具来进行,需要使用bin/solr脚本,执行
 
./solr -help
 
 
如果需要看特定指令的帮助,例如start命令,可以使用
 
./solr start -help
 
 
一般情况下,执行./solr start命令是在后台启动的,如果想将其放到前台(foreground),可以使用
 
./solr start -f
 
 
可以通过-p指定启动端口,默认端口为8983,
 
当命令并没有在前台执行时,可以使用solr的stop命令来终止特定端口下的solr,
 
./solr stop -p 8983
Sending stop command to Solr running on port 8983 ... waiting 5 seconds to allow Jetty process 2835 to stop gracefully.
 
 
此时可以发现另外的solr实例仍然运行(默认还存在一个占用端口为7574的实例,其管理界面仍然是可用的),如果想要将所有的实例都kill掉,可以在stop后面加 -all。
 
在下载的solr完整包中我们可以直接使用solr提供的examples帮助我们迅速了解其关键性能,调用:
 
./solr -e techproducts
Solr home directory /Users/mazhiqiang/develop/tools/solr-5.5.0/example/techproducts/solr already exists.

Starting up Solr on port 8983 using command:
/Users/mazhiqiang/develop/tools/solr-5.5.0/bin/solr start -p 8983 -s "/Users/mazhiqiang/develop/tools/solr-5.5.0/example/techproducts/solr"

Waiting up to 30 seconds to see Solr running on port 8983 [/]  
Started Solr server on port 8983 (pid=4113). Happy searching!


Copying configuration to new core instance directory:
/Users/mazhiqiang/develop/tools/solr-5.5.0/example/techproducts/solr/techproducts

Creating new core 'techproducts' using command:
http://localhost:8983/solr/admin/cores?action=CREATE&name=techproducts&instanceDir=techproducts

{
  "responseHeader":{
    "status":0,
    "QTime":1945},
  "core":"techproducts"}


Indexing tech product example docs from /Users/mazhiqiang/develop/tools/solr-5.5.0/example/exampledocs
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/techproducts/update using content-type application/xml...
POSTing file gb18030-example.xml to [base]
POSTing file hd.xml to [base]
POSTing file ipod_other.xml to [base]
POSTing file ipod_video.xml to [base]
POSTing file manufacturers.xml to [base]
POSTing file mem.xml to [base]
POSTing file money.xml to [base]
POSTing file monitor.xml to [base]
POSTing file monitor2.xml to [base]
POSTing file mp500.xml to [base]
POSTing file sd500.xml to [base]
POSTing file solr.xml to [base]
POSTing file utf8-example.xml to [base]
POSTing file vidcard.xml to [base]
14 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/techproducts/update...
Time spent: 0:00:00.488

Solr techproducts example launched successfully. Direct your Web browser to http://localhost:8983/solr to visit the Solr Admin UI
 
 
默认启用8983端口,此时只会启动一个实例。如果不确定solr是否已经在运行,使用staus命令来查看:
 
./solr status

Found 1 Solr nodes: 

Solr process 4113 running on port 8983
{
  "solr_home":"/Users/mazhiqiang/develop/tools/solr-5.5.0/example/techproducts/solr",
  "version":"5.5.0 2a228b3920a07f930f7afb6a42d0d20e184a943c - mike - 2016-02-16 15:22:52",
  "startTime":"2016-04-07T01:46:13.62Z",
  "uptime":"0 days, 0 hours, 9 minutes, 51 seconds",
  "memory":"56.8 MB (%11.6) of 490.7 MB"}
 
 
可以看到我们通过-e techproducts启动的进程,只会启动一个Solr节点(因为我们并没有采用Cloud模式),这边甚至可以看出其内存占用率。
 
最简单的查询,可以在浏览器中写下下面的url:
 
 
注意URL中主要包含主机名(localhost),端口号(8983),应用名称(solr),请求查询的处理器(select),最后是查询(q=video),最终出来的结果为xml格式,当然也可以非常容易地切换成不同的输出格式,例如JSON,PHP,Ruby,或者用户自定义格式。
 
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">4</int>
<lst name="params">
<str name="q">video</str>
</lst>
</lst>
<result name="response" numFound="3" start="0">
<doc>
<str name="id">MA147LL/A</str>
<str name="name">Apple 60 GB iPod with Video Playback Black</str>
<str name="manu">Apple Computer Inc.</str>
<str name="manu_id_s">apple</str>
<arr name="cat">
<str>electronics</str>
<str>music</str>
</arr>
<arr name="features">
<str>iTunes, Podcasts, Audiobooks</str>
<str>
Stores up to 15,000 songs, 25,000 photos, or 150 hours of video
</str>
<str>
2.5-inch, 320x240 color TFT LCD display with LED backlight
</str>
<str>Up to 20 hours of battery life</str>
<str> 
 
 
 
这里就是根据最新版本5.5.0相关文档而编写的简要入门文档,对于solr的进一步入门,我们后续再继续探讨
 
 
  • 大小: 118.4 KB
  • 大小: 20.9 KB
  • 大小: 98.9 KB
分享到:
评论

相关推荐

    solr入门java工程

    在这个"solr入门java工程"中,我们将探讨如何使用Java客户端与华为FusionInsight SolrTest进行交互,以及如何在SolrCloud模式下进行分布式搜索。 首先,让我们了解Solr的基本概念。Solr的核心功能是提供高效的全文...

    Solr入门配置说明

    【Solr入门配置说明】 Solr,全称为Apache Solr,是一个开源的、基于Java的企业级搜索应用服务器。它提供了一种高效、可扩展的全文检索能力,支持多种数据源,如XML、JSON等,通过HTTP接口进行通信,使得开发者能够...

    solr入门教程

    Solr 是一个开源的全文搜索引擎,它提供了高效、可扩展的搜索和分析功能。本教程将引导你完成Solr的基本安装、配置以及数据库索引的建立,特别关注定时增量索引这一重要特性。 首先,从Apache官方网站下载Solr的...

    Solr入门教程-solr学习入门经典教程

    solr学习入门经典教程,赶紧学习吧,从solr的搭建讲起,中文分词器的配置

    Solr入门使用详解.zip

    Solr是中国Apache软件基金会开发的一款开源全文搜索引擎,它提供了分布式、可扩展的搜索和分析功能。本教程将深入探讨Solr的基本概念、安装配置、索引管理、查询操作以及solrJ库的使用,同时也涉及到了IK分词器的...

    solr入门文档

    以下是对 Solr 入门知识的详细说明: **1. 安装环境** 在开始使用 Solr 之前,确保你的系统满足以下条件: - **Java 运行环境 (JRE) 或 Java 开发工具包 (JDK)**:Solr 需要 JDK 1.6 或更高版本才能运行。你可以...

    solr入门指南

    ### Solr入门指南知识点解析 #### 一、概述(Overview) **Solr** 是一个高性能、基于Lucene的全文搜索引擎,被广泛应用于企业级搜索应用之中。本指南旨在通过一个示例模式(schema)以及样本数据来介绍Solr的基本...

    solr学习入门教程

    ### Solr学习入门教程知识点详解 #### 一、Solr概览 Solr是一个开源的企业级搜索服务器,采用Java作为底层开发语言,具备高度的可扩展性和灵活性。它通过标准的HTTP协议和XML格式进行通信,这意味着即使不精通Java...

    solr_开发入门例子

    本文将基于"solr_开发入门例子"这一主题,详细解释Solr的基础知识,包括其核心概念、安装配置、索引创建与查询,以及相关的开发工具。 1. **Solr核心概念** - **索引**: Solr通过建立倒排索引来实现快速全文检索。...

    solr7.4.0入门讲解,实时增量同步等

    solr入门环境搭建,sorl ik分词器分词,solr数据库数据导入,solr同步等技术实现及配置.版本solr7.4.0 + ikanalyzer-solr5 + solr-dataimport-scheduler

    Solr 入门资料

    Solr 是一个开源的全文搜索引擎,基于 Java 平台,由 Apache Software Foundation 维护。它是 Lucene 的扩展,提供了更高级别的企业级搜索功能,如分布式搜索、缓存、多语言支持、近实时搜索等。Solr 适用于构建大型...

    solr中文教程

    Solr 提供了强大的全文检索功能,支持高亮显示搜索结果,具备动态集群能力,可以与多种数据库交互,并处理各种电子文档格式,如 Word 和 PDF。它还支持分布式搜索和索引复制,确保了高可用性和可扩展性。 Solr 的...

    solr入门之搭建具有安全控制和权限管理功能的SolrCloud集群-附件资源

    solr入门之搭建具有安全控制和权限管理功能的SolrCloud集群-附件资源

    lucene简单介绍及solr搭建使用

    3. **启动Solr**:运行Solr提供的启动脚本,如`solr start`,启动Solr服务器。 4. **创建核心(Core)**:Solr中的每个核心代表一个独立的索引,可以通过管理界面或者命令行工具创建新的核心。 5. **导入数据**:...

    Solr开发指南.pdf

    【Solr入门】 - Schema配置:Schema是Solr的核心配置之一,用于定义字段类型和字段,影响索引和搜索行为。 - 安装中文分词器:为了支持中文搜索,需要安装如IK分词器这样的插件。 - 自定义业务系统Field:根据业务...

    solr项目和相关资源.rar

    5. **Solr入门测试项目**:这个项目可能是为了演示如何创建Solr实例、导入数据、执行查询以及展示结果。通过实践,用户可以了解Solr的基本工作流程,例如使用Postman或其他客户端工具向Solr发送请求,或者使用Java ...

Global site tag (gtag.js) - Google Analytics