引用:http://my.oschina.net/zhanyu/blog/86147
部署前准备:
- Solr 4.0 必须运行在Java1.5 或更高版本的Java 虚拟机中,运行标准Solr 服务只需要安装JRE 即可。
- Solr 4.0 : http://www.apache.org/dyn/closer.cgi/lucene/solr/4.0.0
- 本文以Tomcat7.0 进行演示。
- 如果出现错误无法运行,请更换更高版本的JDK,Solr各版本支持JDK的版本不尽相同,可以查阅官方中各个版本的不同。
Solr 4.0 目录:
这里是我的部署方式,Tomcat安装好之后把apache-solr-4.0.0\example\webapps下的solr.war文件拷贝到Tomcat下的Tomcat7.0\webapps目录下,然后启动Tomcat 报错不用管,solr.war会自动解压,之后打开Tomcat7.0\webapps\solr\WEB-INF\web.xml,把下面代码复制进去放到后面:
//这个是指定solrHome所在的目录
1
2
3
4
5
|
<
env-entry
>
<
env-entry-name
>solr/home</
env-entry-name
> //这个参数不要换
<
env-entry-value
>E:\SolrHome</
env-entry-value
>
<
env-entry-type
>java.lang.String</
env-entry-type
>
</
env-entry
>
|
其中 E:\SolrHome 是存放solr配置文件等,修改为自己文件的位置,为了看着更清晰直观,你可以这样放:
E:\Tomcat7.0
E:\apache-solr-4.0.0
E:\SolrHome
现在可以重新启动Tomcat了,没有报错,通过这个地址进入Solr4.0页面:http://localhost:8080/solr
如果进入以上界面说明成功了,没有成功的话页面会有ERROR提示。
如图:左侧core0,core1等是solr 4.0中的示例,core0和core1位于apache-solr-4.0.0\example\multicore所有文件都下拷贝到E:\SoleHome下,core0和core1可以理解为两个库,都是独立的,用来存放索引以及生成这些索引文件所需要的配置文件,solrtest是我测试建立的目录,如图:
没添加一个库都需要在solr.xml里面进行配置,这个比较简单
1
2
3
4
5
6
7
8
|
<
solr
persistent
=
"false"
>
<
cores
adminPath
=
"/admin/cores"
host
=
"${host:}"
hostPort
=
"${jetty.port:}"
>
<
core
name
=
"core0"
instanceDir
=
"core0"
/>
<
core
name
=
"core1"
instanceDir
=
"core1"
/>
<
core
name
=
"collection1"
instanceDir
=
"collection1"
/>
<
core
name
=
"solrtest"
instanceDir
=
"solrtest"
/>
</
cores
>
</
solr
>
|
1
|
name="",是库的名字,instanceDir="",是目录
|
每个目录下包含两个文件夹conf和data,data下有两个文件夹index和tlog,index是存放生成的索引文件,tlog存放log,conf下是必要的配置文件schema.xml和solrconfig.xml,可以参考官方或者core里面的配置文件:
这里是schema文件,用于定义索引字段的type类型和字段名字.也可以定义“中文分词”类型的。一般中文分词的索引我们用的是,text_ika,所以需要引入jar包。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?
xml
version
=
"1.0"
?>
<
schema
name
=
"example solr test"
version
=
"1.1"
>
<
types
>
<
fieldtype
name
=
"string"
class
=
"solr.StrField"
sortMissingLast
=
"true"
omitNorms
=
"true"
/>
<
fieldType
name
=
"long"
class
=
"solr.TrieLongField"
precisionStep
=
"0"
positionIncrementGap
=
"0"
/>
</
types
>
<
fields
>
<!-- general -->
<
field
name
=
"id"
type
=
"string"
indexed
=
"true"
stored
=
"true"
multiValued
=
"false"
required
=
"true"
/>
<
field
name
=
"type"
type
=
"string"
indexed
=
"true"
stored
=
"true"
multiValued
=
"false"
/>
<
field
name
=
"name"
type
=
"string"
indexed
=
"true"
stored
=
"true"
multiValued
=
"false"
/>
<
field
name
=
"_version_"
type
=
"long"
indexed
=
"true"
stored
=
"true"
/>
</
fields
>
<!-- field to use to determine and enforce document uniqueness. -->
<
uniqueKey
>id</
uniqueKey
>
<!-- field for the QueryParser to use when an explicit fieldname is absent -->
<
defaultSearchField
>name</
defaultSearchField
>
<!-- SolrQueryParser configuration: defaultOperator="AND|OR" -->
<
solrQueryParser
defaultOperator
=
"OR"
/>
</
schema
>
|
solrconfig.xml我还不是很懂,在这里就不讲了,但是必须配置(好像是必须配):
这个基本上维持原样即可,不做改变。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!-- 可以从core文件中copy过来 -->
<
config
>
<
luceneMatchVersion
>LUCENE_40</
luceneMatchVersion
>
<
directoryFactory
name
=
"DirectoryFactory"
class
=
"${solr.directoryFactory:solr.StandardDirectoryFactory}"
/>
<
dataDir
>${solr.solrtest.data.dir:}</
dataDir
> solr.solrtest.data.dir存放的是索引目录
<
updateHandler
class
=
"solr.DirectUpdateHandler2"
>
<
updateLog
>
<
str
name
=
"dir"
>${solr.solrtest.data.dir:}</
str
>
</
updateLog
>
</
updateHandler
>
<
requestHandler
name
=
"/get"
class
=
"solr.RealTimeGetHandler"
>
<
lst
name
=
"defaults"
>
<
str
name
=
"omitHeader"
>true</
str
>
</
lst
>
</
requestHandler
>
<
requestHandler
name
=
"/replication"
class
=
"solr.ReplicationHandler"
startup
=
"lazy"
/>
<
requestDispatcher
handleSelect
=
"true"
>
<
requestParsers
enableRemoteStreaming
=
"false"
multipartUploadLimitInKB
=
"2048"
/>
</
requestDispatcher
>
<
requestHandler
name
=
"standard"
class
=
"solr.StandardRequestHandler"
default
=
"true"
/>
<
requestHandler
name
=
"/analysis/field"
startup
=
"lazy"
class
=
"solr.FieldAnalysisRequestHandler"
/>
<
requestHandler
name
=
"/update"
class
=
"solr.UpdateRequestHandler"
/>
<
requestHandler
name
=
"/admin/"
class
=
"org.apache.solr.handler.admin.AdminHandlers"
/>
<
requestHandler
name
=
"/admin/ping"
class
=
"solr.PingRequestHandler"
>
<
lst
name
=
"invariants"
>
<
str
name
=
"q"
>solrpingquery</
str
>
</
lst
>
<
lst
name
=
"defaults"
>
<
str
name
=
"echoParams"
>all</
str
>
</
lst
>
</
requestHandler
>
<!-- config for the admin interface -->
<
admin
>
<
defaultQuery
>solr</
defaultQuery
>
</
admin
>
</
config
>
|
之后在exampledocs目录下手动创建一个solr1.xml文件://这个也可以是数据库的数据源,这里只是提供xml的数据源,用于提交,形成solr的索引。
1
2
3
4
5
6
7
8
|
<?
xml
version
=
"1.0"
?>
<
add
>
<
doc
>
<
field
name
=
"id"
>solr1</
field
>
<
field
name
=
"type"
>type1</
field
>
<
field
name
=
"name"
>my solr test</
field
>
</
doc
>
</
add
>
|
跟schema.xml中的字段对应,好了现在可以提交数据了,这里在window命令窗口提交数据,把E:\apache-solr-4.0.0\example\exampledocs下的post.jar复制到 E:\SolrHome\exampledocs下
打开命令窗口CD 到E:\SolrHome\exampledocs下使用命令,Tomcat不要忘了开:
java -Durl=http://localhost:8080/solr/solrtest/update -Ddata=files -jar post.jar solr1.xml
如图成功的添加的索引,看下E:\SolrHome\solrtest\data\index下的文件:
进入solr页面:
点击Executu Query查询,右侧生成了地址可以打开查看,到此结束。