Solr6 快速入门教程
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 -nopromptWelcome 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/solrD:\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|-] [<file|folder|url|arg> [<file|folder|url|arg>...]]
...
...
重点在这里:
java [SystemProperties] -jar post.jar [-h|-] [<file|folder|url|arg> [<file|folder|url|arg>...]]
- 要看懂这个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=<core/collection>-Durl=<base Solr update URL> (overrides -Dc option if specified)-Ddata=files|web|args|stdin (default=files)-Dtype=<content-type> (default=application/xml)-Dhost=<host> (default: localhost)-Dport=<port> (default: 8983)-Dbasicauth=<user:pass> (sets Basic Authentication credentials)-Dauto=yes|no (default=no)-Drecursive=yes|no|<depth> (default=0)-Ddelay=<seconds> (default=0 for files, 10 for web)-Dfiletypes=<type>[,<type>,...] (default=xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log)-Dparams="<key>=<value>[&<key>=<value>...]" (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 *.xmljava -Ddata=args -Dc=gettingstarted -jar post.jar '<delete><id>42</id></delete>'java -Ddata=stdin -Dc=gettingstarted -jar post.jar < hd.xmljava -Ddata=web -Dc=gettingstarted -jar post.jar http://example.com/java -Dtype=text/csv -Dc=gettingstarted -jar post.jar *.csvjava -Dtype=application/json -Dc=gettingstarted -jar post.jar *.jsonjava -Durl=http://localhost:8983/solr/techproducts/update/extract -Dparams=literal.id=pdf1 -jar post.jar solr-word.pdfjava -Dauto -Dc=gettingstarted -jar post.jar *java -Dauto -Dc=gettingstarted -Drecursive -jar post.jar afolderjava -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
注意:您可以浏览文档索引在http://localhost:8983/solr/ge...
索引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指南部分CSV格式的索引更新CSV Formatted Index Updates
其他索引技术
- 使用数据导入处理程序(DIH)从数据库中导入记录。
- 使用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 "<delete><id>SP2514N</id></delete>"
windows使用:java -Dc=gettingstarted -Ddata=args -jar example\exampledocs\post.jar "<delete><id>1</id></delete>"
搜索
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 CurrentDload 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 快速入门教程相关推荐
- solr6 java_Solr6 快速入门教程
Solr6 快速入门教程 安装 环境要求 JDK1.8 下载Solr,本文试验时,使用的Solr6.6.0 开始安装 解压solr-6.6.0.zip cd solr-6.6.0\ 启动solr,ru ...
- BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序
BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...
- HealthKit开发快速入门教程大学霸内部教程
HealthKit开发快速入门教程大学霸内部教程 国内第一本HealthKit专向教程.本教程详细讲解iOS中,如何使用HealthKit框架开发健康应用.最后,本教程结合HealthKit ...
- Apple Watch开发快速入门教程
Apple Watch开发快速入门教程 试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本A ...
- 指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程
指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程 1.4.2 指示灯组 指示灯组的放大图如图1.5所示. 图1.5 指示灯组 各个指示灯对应的功能如下: q RX:对应于0号端口 ...
- 游戏控制杆OUYA游戏开发快速入门教程
游戏控制杆OUYA游戏开发快速入门教程 1.2.2 游戏控制杆 游戏控制杆各个角度的视图,如图1-4所示,它的硬件规格是本文选自OUYA游戏开发快速入门教程大学霸: 图1-4 游戏控制杆各个角度的 ...
- Arduino Yun的主要部件介绍选自Arduino Yun快速入门教程
Arduino Yun的主要部件介绍 1.4.1 主要部件 Yun的主要部件如图1.4所示. 图1.4 Arduino Yun的主要部件 在Yun小小的板子上集成了两颗处理器.一个是ATmega3 ...
- 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程
认识AndEngine什么是AndEngine 随着Android手机.平板的盛行,Android下的游戏也不断的变得火热.而对于游戏开发有兴趣的同学们,应该也想要学习开发游戏.虽说游戏开发的引擎较多 ...
- OUYA游戏开发快速入门教程1.2OUYA的硬件规格
OUYA游戏开发快速入门教程1.2OUYA的硬件规格 从官网上购买回来的OUYA产品,包含游戏主机.游戏控制杆.说明书.电源线.HDMI线.电源线和电池,如图1-2所示.本节就来简要介绍下,游戏主机和 ...
- Android 2D游戏引擎AndEngine快速入门教程
Android 2D游戏引擎AndEngine快速入门教程 介绍:AndEngine是一款知名的Android 2D游戏引擎.该引擎代码开源,并且可以免费使用.本书详细讲解如何使用AndEngine引 ...
最新文章
- 一种使用GDI+对图片尺寸和质量的压缩方法
- git服务器查看用户信息,git 查看当前git用户_新Git用户使用方法
- HBase性能优化方法总结(3):写表操作
- 推荐一款软件(作业)
- C51编程在不同内存空间(data xdata bdata)定义变量的注意事项
- 【 .NET Core 3.0 】框架之二 || 后端项目搭建
- 你有遇到过最没良心的人吗?
- word2016 图片去底灰_几块钱买的葫芦,三四十双手套轮换用,他个个盘出玻璃底...
- 处理Easyui的Datagrid无法及时刷新问题
- Java如何替换switch顺序执行_java 多重switch中break的用法以及switch的查找顺序
- C#中 JSON 序列化 与 反序列化
- 搜索,推荐,广告系统架构及算法技术资料大合集吐血整理——2020年终分享
- 东方木分享:如何快速的安装网吧系统
- 关于特征筛选中的IV值
- 迪赛智慧数——折线图(面积折线图):各年龄段员工离职率
- GEE系列:第 1 单元 Google 地球引擎简介
- Discriminative Locality Alignment (DLA)
- pdf太大怎么压缩大小?
- 【校招笔试】网易校招网络笔试题,菜的抠脚,蠢的流泪
- C++重温笔记(一): C++再初识
热门文章
- 8数码问题-搜索-双向BFS/A*算法
- Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十四】
- MyBatis-Plus-Generator配置
- 操作系统(秋招整理)
- System.Diagnostics.debug.Assert(条件)的使用
- 动态添加按钮并获取当前点击按钮名字事件
- winform 获取当前项目所在的路径
- DropDownList 实现分页不包含选择值
- Spark数据分析技术学习笔记(二)——DataFrame使用
- 【解决方案】K2 BPM_赋能房地产业务高效运营_全球领先的工作流引擎