设为首页 收藏本站
查看: 1795|回复: 0

[经验分享] Solr初体验

[复制链接]

尚未签到

发表于 2016-12-14 09:44:29 | 显示全部楼层 |阅读模式
Solr
的官方介绍


Solr is the popular, blazing fast open
source enterprise search platform from the Apache Lucene project. Its major
features include powerful full-text search, hit highlighting, faceted search,
dynamic clustering, database integration, and rich document (e.g., Word, PDF)
handling. Solr is highly scalable, providing distributed search and index
replication, and it powers the search and navigation features of many of the
world's largest internet sites.

 

Solr
安装


1
、上
apache
下载
solr
安装文件(
http://lucene.apache.org/solr/

),我做测试时下载的是最新版本的压缩包(
apache-solr-1.4.1
)。

2
、解压缩,将
apache-solr-1.4.1\example\webapps
下的
solr.war
放置在
tomcat
容器的
webapps
目录中

3
、设置
Solr
的主位置,可以通过以下三种方式:

A
、设置
java
系统属性
 solr.solr.home 
(没错,就是
 solr.solr.home
)。

B
、配置
 java:comp/env/solr/home 
的一个
JNDI
查找指向
 solr 
目录。

C
、在包含
solr
目录的目录中启动
servlet
容器。(默认的
Solr
主目录是当前工作目录下的
 solr
。)。

我采用的方式是在
tomcat


conf\Catalina\localhos
目录下建立
solr.xml
文件,我将
solr

home
放在
D
盘,文件内同如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:\apache-solr-1.4.1\example\webapps\solr.war" debug="0" crossContext="true" >
<Environment name="solr/home" type="java.lang.String" value="D:\solr_home" override="true" />
</Context>

  
 这样配置不需要将
solr.war
文件放在
tomcat
容器的
webapps
目录中。
Solr home
中的内容为
apache-solr-1.4.1\example\solr
下的内容,其中主要的三个文件夹为:
bin

conf

data

data
下就是存放索引的地方。如果一切配置成功,启动
tomcat
,访问
http://localhost:8088/solr/admin


(
我的
tomcat
端口号为
8088)
,即可访问到
solr
管理主界面。

 

Solr
重要文件的简单说明(详细信息
tosee solr wiki



solrconfig.xml

solr
的基础文件,里面配置了各种
web
请求处理器、请求响应处理器、日志、缓存等。

schema.xml
配置映射了各种数据类型的索引方案。分词器的配置、索引文档中包含的字段也在此配置。

 
 
Solr
使用


Solr

web
形式的发布,对外提供了添加、修改、删除索引和检索的
web
服务。并且提供多种格式的信息传输,如
xml

json

cvs
等,默认提供的是
xml
格式。

以下是按照
solr
的默认配置,对
solr
初步体验的过程

<!--[if !supportLists]-->1、 



<!--[endif]-->设计索引模型。
索引模型中包含四个不同数据类型的字段:
Id(int)

time

Calendar
)、
enabled(boolean)

content(String)
。其中
id
是文档的唯一标识。

<!--[if !supportLists]-->2、 



<!--[endif]-->在
schema.xml
中映射索引模型的各个字段。

具体的内同如下:

 

<!—field 标签配置了字段的解析类型、是否需要索引、是否需要存储等,详细信息 to see  solr wiki-- >
<field name="id" type="integer" indexed="true" stored="true"/>
<field name="time" type="date" indexed="true" stored="true"/>
<field name="enabled" type="boolean" indexed="true" stored="true"/>
<field name="content" type="text" indexed="true" stored="true"/>
<!- 字段all是一个虚拟的字段,代表所有的字段,在此表示:id,time,enabled,content 
<field name="all" type="text" indexed="true" stored="true" multiValued="true"/>
<!—uniqueKey告诉solr id字段是文档的唯一标识 -->
<uniqueKey>id</uniqueKey>
<!—solrQueryParser 标签表示多条件检索时采用的策略。如:检索条件content:xxx time:xxx solr就会采取content:xxx OR time:xxx 这种形式-->
<solrQueryParser defaultOperator="OR"/>
<!—defaultSearchField标签表示如果没有明确检索那个字段,solr就会检索这个标签配置的字段 -->
<defaultSearchField>all</defaultSearchField>
<!—copyField标签表示将其他字段复制到目标字段,方面检索。如:将id、time、enabled、content 复制到all上面,当不指定明确的检索字段,solr就会检索all字段,其实就是检索id、time、enabled、content -->
<copyField source="id" dest="all"/>
<copyField source="time" dest="all"/>
<copyField source="enabled" dest="all"/>
<copyField source="content" dest="all"/>

 
 
<!--[if !supportLists]-->3、 



<!--[endif]-->配置中文分词。

我采用的是
IKAnalyzer
中文分词,中文分词器的配置参考
IKAnalyzer
中文分词的使用手册。中文分词器需安装在
solr web


4
、编写客户端程序访问
solr web
服务创建、修改、删除索引和搜索

      
Solr

默认提供的
web
服务
api
如下:

      

创建、更新、提交、优化索引:
http://localhost:8088/solr/update
post

      

删除索引:
http://localhost:8088/solr/update
post

      

搜索:
http://localhost:8088/solr/select
get

 
4.1
创建、更新、提交、优化索引(详细的配置信息
tosee Solr wiki


创建、更新索引需要向
solr
服务提供如下的格式化信息

 

<add>
<doc>
<field name="id">1</field>
<field name="time">2010-10-10T11:11:11.222S </field>
<field name="enabled">true</field>
<field name="content">solr development</field>
</doc>
[<doc> ... </doc>[<doc> ... </doc>]]
</add>

  
 创建或修改完索引,需要提交,这样
solr
才能够检索到

提交索引变化的格式化信息如下:

<commit/>

优化索引的格式化信息如下:

< optimize/>

索引的提交或优化也可以以
url
参数的形式体现。如

http://localhost:8088/solr/update?commit=true


 
4.2
删除索引的格式化信息(详细的配置信息
tosee Solr wiki


 

<delete>
<id>1</id>
<id>2</id>
<query>content:solr</query>
</delete>

 
 
4.3
搜索

Solr
的查询语法(详细的配置信息
tosee Solr wiki


 


参数



描述



示例



q



Solr
中用来搜索的查询。有关该语法的完整描述,分号和已索引且未进行断词的字段(下面会进行解释)的名称来包含排序信息。默认的排序是
 score desc
,指按记分降序排序。



q=myField:Java AND
otherField:developerWorks; date asc 

此查询搜索指定的两个字段并根据一个日期字段对结果进行排序。



q.op



表示
q

查询语句的
各条件的逻辑操作
AND(

) OR(



<!--[if !supportLineBreakNewLine]-->

<!--[endif]-->



q.op=AND



start



将初始偏移量指定到结果集中。可用于对结果进行分页。默认值为
0




start=15 

返回从第
15
个结果开始的结果。



rows



返回文档的最大数目。默认值为
10




rows=25



fq



提供一个可选的筛选器查询。查询结果被限制为仅搜索筛选器查询返回的结果。筛选过的查询由
Solr
进行缓存。它们对提高复杂查询的速度非常有用。



任何可以用
 q 
参数传递的有效查询,排序信息除外。



hl




 hl=true 
时,在查询响应中醒目显示片段。默认为
false




hl=true



hl.fl



高亮
field 



hl.fl=id,content



hl.simple.pre



高亮前面的格式



hl.simple.pre=<a>



hl.simple.post



高亮后面的格式



hl.simple.post=</a>



fl



作为逗号分隔的列表指定文档结果中应返回的
 Field 
集。默认为
“*”
,指所有的字段。
“score”

指还应返回记分。



*,score



sort 

 



排序



sort =id asc


 
实例

 

//利用httpclient访问solr服务、服务端返回标准的xml格式信息
//需要较好的展示需要自己解析xml格式信息
String keyword = req.getParameter("q");
if(StringUtils.isNotBlank(keyword)){
String command = "fl=*,score&start=0&rows=10&hl=true&hl.fl=*&q="+URLEncoder.encode(keyword, "UTF-8");
responseResult = HttpClientUtils.sendGetCommand(command, "http://localhost:8088/solr/select");
responseResult = escape(responseResult);
}

  
 
有了上述的基本了解,一个最基础的应用就可以跑起来了。具体代码请看附件源码

 

 

供参考的资料:

Solr

wiki
地址(内容非常详细,英语好的可直接阅读):

http://wiki.apache.org/solr/FrontPage


使用
Apache Solr

实现更加灵巧的搜索第
1
部分
:
基本特性和
Solr
模式

http://www.ibm.com/developerworks/cn/java/j-solr1/index.html?ca=drs-


使用
Apache Solr

实现更加灵巧的搜索,第
2
部分
:
用于企业的
Solr

http://www.ibm.com/developerworks/cn/java/j-solr2/index.html?ca=drs-


 
 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-314099-1-1.html 上篇帖子: solr安装配置注意事项 下篇帖子: solr+IKAnalyzer部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表