Solr6 快速入门教程

安装

环境要求

JDK1.8

下载Solr,本文试验时,使用的Solr6.6.0

开始安装

解压solr-6.6.0.zip

cd solr-6.6.0\

启动solr,run: bin\solr start -e cloud -noprompt

D:\machine\solr\solr-6.6.0>bin\solr start -e cloud -noprompt

Welcome to the SolrCloud example!

Starting up 2 Solr nodes for your example SolrCloud cluster.

...

Started Solr server on port 8983. Happy searching!

...

Started Solr server on port 7574. Happy searching!

...

SolrCloud example running, please visit: http://localhost:8983/solr

D:\machine\solr\solr-6.6.0>

访问Solr管理可视化页面: http://localhost:8983/solr,检测Solr是否运行。

Solr 现在将运行两个节点,一个在端口7574,一个在端口8983,有一个自动创建的文档gettingstarted,默认有两个分片收集,每个分片有两个副本,这管理页面的Cloud tab 可以很直观的查看。

Solr服务器已经启动并运行,但是它不包含任何数据。Solr安装包括了bin/post工具,以便从一开始就方便地从Solr的文档中获得各种类型的文档。

注意:当前的bin/post工具没有一个可以比拟的Windows脚本,但是调用的底层Java程序是可用的。

学习post.jar

在windows中,bin/post可以委托给一个独立运行的Java程序叫SimplePostTool,可以执行运行 java -jar example/exampledocs/post.jar

D:\machine\solr\solr-6.6.0>java -jar example\exampledocs\post.jar -h查看帮助可以(获取文件,递归到一个网站或文件系统文件夹,或者向Solr服务器发送直接命令)

SimplePostTool version 5.0.0

Usage: java [SystemProperties] -jar post.jar [-h|-] [ [...]]

...

...

重点在这里:

java [SystemProperties] -jar post.jar [-h|-] [ [...]]

要看懂这个post.jar,首先要知道,被中括号包住的参数表示可选参数,|表示或者,SystemProperties表示系统属性;

什么叫系统属性呢?即通过System.setProperty(key,value)设置的参数;

这里的key,value值都是随便定义的,没什么特别要求,这样你随后通过System.getProperty(key)通过key就能在任意时刻获取到该key对应的参数值,如果是在dos命令行下,你也可以通过java -Dkey=value这种方式指定,至此java [SystemProperties]这部分你应该理解了,至于后面的-jar是java命令的参数,即执行一个jar文件,-jar后面指定一个jar包路径,默认是相对于当前所在路径,-h即表示添加了这个即会打印命令提示信息,就好比你敲java -h是类似的,后面的file,folder,url,args分别表示你要提交的数据的几种不同表示形式,file即表示你要提交的数据是存在于文件中,而folder即表示你要提交的存在于文件夹中,url即表示你要提交的数据是存在于互联网上的一个URL地址表示的资源,它可能是一个HTML页面,可能是一个PDF文件,可能是一个图片等等,args即表示你要提交的数据直接在命令行敲出来,但arges并不是随随便便一个字符串就行的,它需要有固定的格式,solr才能解析

java -jar example\exampledocs\post.jar -h查看帮助列出的内容说到:

Supported System Properties and their defaults:

-Dc=

-Durl= (overrides -Dc option if specified)

-Ddata=files|web|args|stdin (default=files)

-Dtype= (default=application/xml)

-Dhost= (default: localhost)

-Dport= (default: 8983)

-Dbasicauth= (sets Basic Authentication credentials)

-Dauto=yes|no (default=no)

-Drecursive=yes|no| (default=0)

-Ddelay= (default=0 for files, 10 for web)

-Dfiletypes=[,,...] (default=xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log)

-Dparams="=[&=...]" (values must be URL-encoded)

-Dcommit=yes|no (default=yes)

-Doptimize=yes|no (default=no)

-Dout=yes|no (default=no)

-D是命令行下指定系统属性的固定前缀

c表示collection名称,你需要对solr admin里的哪个collection进行索引数据添加/修改/删除

url表示solr admin后台索引更新的请求URL,这个URL是固定的,一般格式是http://host:port/solr/${collectionName}/update,这里的${collectionName}和上面的c属性值保持一致

data表示你要提交数据的几种模式,files模式表示你要提交的数据在文件里

web表示你要提交的数据在互联网上的一个URL表示的资源文件里

args表示你要提交的数据你会直接在post.jar命令后面直接输入

stdin表示你要提交的数据需要在dos命令行下通过System.in输入流临时接收,跟args有点类似,但不同的是,stdin模式下,post.jar后面不需要指定任何参数,直接回车即可,然后程序会等待用户输入,用户输入完毕再回车,post.jar会接收到用户输入,post.jar重新被唤醒继续执行。而args是直接在post.jar后面输入参数,没有一个中断过程,而stdin模式下如果用户一直没有输入,那post.jar就会一直阻塞在那里等待用户输入为止。

type表示你要提交数据的MIME类型,默认是application/xml即默认会当作是XML来处理

host表示你要链接的SOlr Admin部署服务器的主机名或者IP地址,默认是localhost

port表示你要链接的Solr Admin部署的Web容器监听的端口号,默认post.jar里设置为8983port具体值取决于你实际部署环境而定

auto表示是否自动猜测文件类型

recursive表示是否递归,这里递归有两种情况,比如你data=folder即表示是否递归查找文件夹下的所有文件,如data=web即表示是否递归抓取URL,设置为no即表示不递归操作,设置为一个数字,即表示递归深度

delay:这里的时间延迟也分两种,如果你post的是file,那么每个file的post间隔为0,即不做延迟处理而如果你是post的是网络上的一个url资源,因为需要受到对方服务器的访问限制,所以必须要做一个抓取频率限制即每抓一个睡眠一会儿,否则抓取太快太频率容易被对方封IP。

filetypes表示post.jar支持提交哪些文件类型,后面有列出默认支持的文件类型,如果你想覆盖默认值,那么请指定此参数

params表示需要追加到Solr Admin的请求URL后面的请求参数如id=1&name=yida之类的

commit表示是否提交到solr admin后台进行索引写入,设置为false表示不提交至sor admin,但设置为true也不一定就意味着就一定会把索引写入磁盘,这取决于solrconfig中directory配置的实现是什么,如果配置的是RAMDirectory,就仅仅只在内存中操作了。

optimize表示是否需要对索引进行优化操作,默认为no即表示不对索引进行优化

out即OutputStream表示输出流,这个参数作用就是,你请求Solr Admin添加索引数据,Solr Admin后台会返回数据给你,Solr Admin后台返回的数据你拿什么输出流来接收,默认是System.out即表示把后台返回的信息输出打印到控制台

参数这里应该已经搞得清楚了,再来看看官方提供的几个post.jar使用命令示例:

Examples:

java -Dc=gettingstarted -jar post.jar *.xml

java -Ddata=args -Dc=gettingstarted -jar post.jar '42'

java -Ddata=stdin -Dc=gettingstarted -jar post.jar < hd.xml

java -Ddata=web -Dc=gettingstarted -jar post.jar http://example.com/

java -Dtype=text/csv -Dc=gettingstarted -jar post.jar *.csv

java -Dtype=application/json -Dc=gettingstarted -jar post.jar *.json

java -Durl=http://localhost:8983/solr/techproducts/update/extract -Dparams=literal.id=pdf1 -jar post.jar solr-word.pdf

java -Dauto -Dc=gettingstarted -jar post.jar *

java -Dauto -Dc=gettingstarted -Drecursive -jar post.jar afolder

java -Dauto -Dc=gettingstarted -Dfiletypes=ppt,html -jar post.jar afolder

更多关于post.jar的信息请点击这里

建立索引

索引一个包含多种文件的目录

bin/post可以循环提取文件目录,将每个文件的原始内容发送到Solr以提取和索引

Solr安装后,包括一个docs/子目录,windows下使用如下命令:java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar docs/

linux下可以使用bin/post -c gettingstarted docs/

命令解析:

-c gettingstarted:要索引的集合的名称

docs/: Solr安装目录下的/docs的相对路径

Solr索引XML

使用bin/post,索引示例Solr XML文件中的示例/example文档/:

linux下使用:bin/post -c gettingstarted example/exampledocs/*.xml

windows下使用:

java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\*.xml

你将会看到:

D:\machine\solr\solr-6.6.0>java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\*.xml

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

POSTing file gb18030-example.xml (application/xml) to [base]

POSTing file hd.xml (application/xml) to [base]

POSTing file ipod_other.xml (application/xml) to [base]

POSTing file ipod_video.xml (application/xml) to [base]

POSTing file manufacturers.xml (application/xml) to [base]

POSTing file mem.xml (application/xml) to [base]

POSTing file money.xml (application/xml) to [base]

POSTing file monitor.xml (application/xml) to [base]

POSTing file monitor2.xml (application/xml) to [base]

POSTing file mp500.xml (application/xml) to [base]

POSTing file sd500.xml (application/xml) to [base]

POSTing file solr.xml (application/xml) to [base]

POSTing file utf8-example.xml (application/xml) to [base]

POSTing file vidcard.xml (application/xml) to [base]

14 files indexed.

COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update...

Time spent: 0:00:03.233

索引JSON

Solr支持索引JSON,即任意结构化JSON或“Solr JSON”(类似于Solr XML)

Solr包含一个很小的示例Solr JSON文件,以演示该功能。再次使用bin/post,索引示例JSON文件:

linux使用: bin/post -c gettingstarted example/exampledocs/books.json

windows使用:java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\books.json

你将看到如下信息:

D:\machine\solr\solr-6.6.0>java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\books.json

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

POSTing file books.json (application/json) to [base]/json/docs

1 files indexed.

COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update...

Time spent: 0:00:01.211

要了解关于索引Solr JSON的更多信息,请参阅Solr参考指南部分Solr-Style JSON

索引CSV

数据到Solr的一个重要通道是通过CSV,尤其是当文档是均匀的,所有的记录都有相同的字段。CSV可以方便地从电子表格中导出,例如Excel,或者从MySQL等数据库导出。在开始使用Solr时,通常最容易将结构化数据转换为CSV格式,然后将其索引到Solr,而不是一个更复杂的单步操作。

使用bin/post索引包含的示例CSV文件:

linux下使用:bin/post -c gettingstarted example/exampledocs/books.csv

windows下使用:java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\books.csv

在你的终端,你会看到:

D:\machine\solr\solr-6.6.0>java -Dc=gettingstarted -Dauto=yes -Ddata=files -Drecursive=yes -jar example/exampledocs/post.jar example\exampledocs\books.csv

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

POSTing file books.csv (text/csv) to [base]

1 files indexed.

COMMITting Solr index changes to http://localhost:8983/solr/gettingstarted/update...

Time spent: 0:00:00.874

其他索引技术

使用Solr在基于jvm的语言或其他Solr客户端,以编程方式创建文档发送到Solr。

使用Solr管理页面的文档选项卡粘贴一个要被索引的文档,或者选择Document Type的下拉选项卡选择Document Builder每次添加一个字段来构建文档.单击表单下面的Submit文档按钮,以索引文档。

数据操作

更新数据

默认情况下,schema.xml指定了一个uniqueKey字段id,即使我们索引一个内容多次,它也不会重复添加,当我们POST命令到Solr添加文档时,如果uniqueKey字段当前值已存在,它会自动替换原来的内容.

删除数据

可以通过将delete命令发送到更新URL并指定文档的惟一键字段的值,或者匹配多个文档的查询(小心使用这个!)来删除数据。

执行以下命令删除一个特定的文档:

linux使用:bin/post -c gettingstarted -d "SP2514N"

windows使用:java -Dc=gettingstarted -Ddata=args -jar example\exampledocs\post.jar "1"

搜索

Solr可以通过REST客户端,cURL,wget,POSTMAN等来查询,以及许多编程语言都可以使用的本地客户端。

Solr管理UI包含一个查询构建器接口——gettingstarted默认文档查询:http://localhost:8983/solr/#/...如果你不改变表单里的任何内容,直接点击Execute Query按钮,你将得到默认10条JSON格式的文档(*:*作为q的参数表示匹配所有文档)

由Admin UI发送到Solr的URL显示在上面屏幕右上角的浅灰色中,如果你点击它,你的浏览器将会显示原始的响应。要使用cURL,请在cURL命令行中使用相同的URL:

curl "http://localhost:8983/solr/gettingstarted/select?indent=on&q=*:*&wt=json"

基础

搜索一个词

搜索一个特定的词,需要把在Solr Admin UI查询板块中的q的参数值*:*替换成你想要查询的词

curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation"

你将得到:

$ curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation"

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 2017 100 2017 0 0 123k 0 --:--:-- --:--:-- --:--:-- 123k{

"responseHeader":{

"zkConnected":true,

"status":0,

"QTime":17,

"params":{

"q":"foundation",

"indent":"true",

"wt":"json"}},

"response":{"numFound":3,"start":0,"maxScore":3.4038174,"docs":[

{

"id":"0553293354",

"cat":["book"],

"name":["Foundation"],

"price":[7.99],

"inStock":[true],

"author":["Isaac Asimov"],

"series_t":["Foundation Novels"],

"sequence_i":1,

"genre_s":"scifi",

"_version_":1576664844219711488},

{

...

响应表明,有3个命中("numFound":3),其中前10个被返回,因为默认的start=0,rows=10。您可以通过指定这些params查询结果,其中start是第一个结果返回的(基于零的)位置,而raws是一页的大小。

要限制响应中返回的字段,请使用fl param,该命令将使用逗号分隔的字段名列表。只返回id字段:

curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=foundation&fl=id"

q=foundation匹配了我们已经索引的几乎所有文档,因为文档中的大多数文件都包含“Apache软件基金会”。要限制搜索到特定字段,使用语法"q=field:value",例如只在name字段中搜索Foundation:

curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=name:Foundation"

短语检索

要搜索一个多词短语,用双引号括起来:q="这里的多个词语"。例如,搜索"CAS latency"注意,术语之间的空格必须转换为"+"(Admin UI将自动处理URL编码):

curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=true&q=\"CAS+latency\""

你将看到:

"responseHeader":{

"zkConnected":true,

"status":0,

"QTime":9,

"params":{

"q":"\"CAS latency\"",

"indent":"true",

"wt":"json"}},

"response":{"numFound":2,"start":0,"maxScore":2.9027793,"docs":[

{

"id":"TWINX2048-3200PRO",

"name":["CORSAIR XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail"],

"manu":["Corsair Microsystems Inc."],

"manu_id_s":"corsair",

"cat":["electronics",

"memory"],

"features":["CAS latency 2, 2-3-3-6 timing, 2.75v, unbuffered, heat-spreader"],

...

组合搜索

默认情况下,当你在单一查询中搜索多个词或短语时,Solr只要求其中一个匹配,以便让文件匹配,包含更多词语的文档将在结果列表中排序更高。

你可以查询一个词通过前缀加上"+"来限定;相反,为了不允许出现一个词,用"-"前缀来限定。

因为"+"字符在url中有一个保留的目的(空格字符编码),所以必须使用URL encode进行编码在curl中使用.

curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=on&q=%2Baaa+%2BFoundatio"

查找含有"Foundation"但是不含有"aaa"的文档,在Admin UI 的查找页面的q参数中输入+Foundation -one,在curl中将"+"编码为"%2B"

$ curl "http://localhost:8983/solr/gettingstarted/select?wt=json&indent=on&q=%2BFoundation+-aaa"

深入学习:要了解更多Solr搜索选项,请参阅Solr参考指南的搜索部分。

清除

当你在完成了上面示例后,你可能想要阻止Solr,并把环境重新设定到起点。下面的命令行将停止Solr并删除开始脚本创建的两个节点的目录:

bin/solr stop -all ; rm -Rf example/cloud/

接下来去哪里?

有关Solr的更多信息,请查看以下参考资料:

Solr参考指南(确保您将参考指南的版本与您的Solr版本匹配)

也可以参考一些额外的资源

solr6 java_Solr6 快速入门教程相关推荐

  1. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  2. ​HealthKit开发快速入门教程大学霸内部教程

    ​HealthKit开发快速入门教程大学霸内部教程 ​ ​ 国内第一本HealthKit专向教程.本教程详细讲解iOS中,如何使用HealthKit框架开发健康应用.最后,本教程结合HealthKit ...

  3. Apple Watch开发快速入门教程

     Apple Watch开发快速入门教程  试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...

  4. 指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程

    指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程 ​1.4.2  指示灯组 指示灯组的放大图如图1.5所示. 图1.5  指示灯组 各个指示灯对应的功能如下: q  RX:对应于0号端口 ...

  5. 游戏控制杆OUYA游戏开发快速入门教程

    游戏控制杆OUYA游戏开发快速入门教程 1.2.2  游戏控制杆 游戏控制杆各个角度的视图,如图1-4所示,它的硬件规格是本文选自OUYA游戏开发快速入门教程大学霸: 图1-4  游戏控制杆各个角度的 ...

  6. Arduino Yun的主要部件介绍选自Arduino Yun快速入门教程

    Arduino Yun的主要部件介绍 1.4.1  主要部件 Yun的主要部件如图1.4所示. 图1.4  Arduino Yun的主要部件 在Yun小小的板子上集成了两颗处理器.一个是ATmega3 ...

  7. 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程

    认识AndEngine什么是AndEngine 随着Android手机.平板的盛行,Android下的游戏也不断的变得火热.而对于游戏开发有兴趣的同学们,应该也想要学习开发游戏.虽说游戏开发的引擎较多 ...

  8. OUYA游戏开发快速入门教程1.2OUYA的硬件规格

    OUYA游戏开发快速入门教程1.2OUYA的硬件规格 从官网上购买回来的OUYA产品,包含游戏主机.游戏控制杆.说明书.电源线.HDMI线.电源线和电池,如图1-2所示.本节就来简要介绍下,游戏主机和 ...

  9. Android 2D游戏引擎AndEngine快速入门教程

    Android 2D游戏引擎AndEngine快速入门教程 介绍:AndEngine是一款知名的Android 2D游戏引擎.该引擎代码开源,并且可以免费使用.本书详细讲解如何使用AndEngine引 ...

最新文章

  1. git ssh key创建和github使用
  2. 【收藏】Win10:路径长度超过260个字符
  3. 使用WebSocket绕过广告屏蔽插件
  4. React ref的转发
  5. python输入三个整数、输出最大的数_题目:使用Python编程,输入三个整数x,y,z,请把这三个数由小到大输出...
  6. 我和Linux,不得不说的故事
  7. ipixsoft swf to html5 converter,iPixSoft SWF to Video Converter(视频转换软件)
  8. 用Python弹奏周董的《菊花台》是什么效果
  9. 大华设备无法注册EasyGBS国标视频平台,是什么原因?
  10. 车金融|合同中心系统的前世今生
  11. Python实现线性函数的拟合算法
  12. 睡眠是锁定计算机怎么设置密码,电脑休眠锁屏怎么设置
  13. android 局域网图片 管理,支持局域网浏览/简洁美观的安卓文件管理器-es文件管理器...
  14. 【场景削减】拉丁超立方抽样方法场景削减(Matlab代码实现)
  15. Oracle数据库迁移到AWS云的方案
  16. LCM液晶显示模组是什么,液晶显示模块有几种类型呢
  17. VMWare安卓安卓系统虚拟机
  18. C# DataRow转DataTable
  19. 如何用postman测试导出excel接口
  20. win10 安装 GPU+Tensorflow

热门文章

  1. 《易学C++(第2版)》——1.10 习题
  2. 趣味程序之古典与经典问题系列
  3. 灰色简约三级CSS下拉菜单代码
  4. 【SRH】------常见的HTTP状态码
  5. jQuery多库共存问题解决方法
  6. [LeetCode]--63. Unique Paths II
  7. 外部排序---置换选择+败者树
  8. java 的对象强制转换后的调用
  9. VirtualBox中修改Ubuntu-server分辨率
  10. Css框架and公共Css文件