Solr6 快速入门教程

安装

环境要求

  1. JDK1.8
  2. 下载Solr,本文试验时,使用的Solr6.6.0

开始安装

  1. 解压solr-6.6.0.zip
  2. cd solr-6.6.0\
  3. 启动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>
  1. 访问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也不一定就意味着就一定会把索引写入磁盘,这取决于solrconfigdirectory配置的实现是什么,如果配置的是RAMDirectory,就仅仅只在内存中操作了。
    • optimize表示是否需要对索引进行优化操作,默认为no即表示不对索引进行优化
    • outOutputStream表示输出流,这个参数作用就是,你请求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=0rows=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 快速入门教程相关推荐

  1. solr6 java_Solr6 快速入门教程

    Solr6 快速入门教程 安装 环境要求 JDK1.8 下载Solr,本文试验时,使用的Solr6.6.0 开始安装 解压solr-6.6.0.zip cd solr-6.6.0\ 启动solr,ru ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 一种使用GDI+对图片尺寸和质量的压缩方法
  2. git服务器查看用户信息,git 查看当前git用户_新Git用户使用方法
  3. HBase性能优化方法总结(3):写表操作
  4. 推荐一款软件(作业)
  5. C51编程在不同内存空间(data xdata bdata)定义变量的注意事项
  6. 【 .NET Core 3.0 】框架之二 || 后端项目搭建
  7. 你有遇到过最没良心的人吗?
  8. word2016 图片去底灰_几块钱买的葫芦,三四十双手套轮换用,他个个盘出玻璃底...
  9. 处理Easyui的Datagrid无法及时刷新问题
  10. Java如何替换switch顺序执行_java 多重switch中break的用法以及switch的查找顺序
  11. C#中 JSON 序列化 与 反序列化
  12. 搜索,推荐,广告系统架构及算法技术资料大合集吐血整理——2020年终分享
  13. 东方木分享:如何快速的安装网吧系统
  14. 关于特征筛选中的IV值
  15. 迪赛智慧数——折线图(面积折线图):各年龄段员工离职率
  16. GEE系列:第 1 单元 Google 地球引擎简介
  17. Discriminative Locality Alignment (DLA)
  18. pdf太大怎么压缩大小?
  19. 【校招笔试】网易校招网络笔试题,菜的抠脚,蠢的流泪
  20. C++重温笔记(一): C++再初识

热门文章

  1. 8数码问题-搜索-双向BFS/A*算法
  2. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十四】
  3. MyBatis-Plus-Generator配置
  4. 操作系统(秋招整理)
  5. System.Diagnostics.debug.Assert(条件)的使用
  6. 动态添加按钮并获取当前点击按钮名字事件
  7. winform 获取当前项目所在的路径
  8. DropDownList 实现分页不包含选择值
  9. Spark数据分析技术学习笔记(二)——DataFrame使用
  10. 【解决方案】K2 BPM_赋能房地产业务高效运营_全球领先的工作流引擎