标签:des Lucene style blog http color java os 使用
工作量及扩展性都较大,不采用。
同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,暂时不采用。
适合于对数据库驱动的应用数据进行索引,尤其是替代传统的like ‘%expression%’来实现对varchar或clob等字段的索引,对于实现站内搜索是一种值得采纳的方案。但在分布式处理、接口封装上尚需要自己进行一定程度的封装,暂时不采用。
封装及扩展性较好,提供了较为完备的解决方案,因此在门户社区中采用此方案,后期加入Compass方案。
Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对 Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用 Solr 创建的索引。
由于Solr基于java开发,因此Solr在windows及Linux都能较好部署使用,但由于Solr提供了一些用于测试及管理、维护较为方便的shell脚本,因此在生产部署时候建议安装在Linux上,测试时候可以在windows使用。
下面以Linux下安装配置Solr进行说明,windows与此类似。
wget http://apache.mirror.phpchina.com/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.zip
unzip apache-tomcat-6.0.16.zip
mv apache-tomcat-6.0.16 /opt/tomcat
chmod 755 /opt/tomcat/bin/*
wget http://apache.mirror.phpchina.com/lucene/solr/1.2/apache-solr-1.2.0.tgz
tar zxvf apache-solr-1.2.0.tgz
Solr的安装配置最为麻烦的是对solr.solr.home的理解和配置,主要有三种
cp apache-solr-1.2.0/dist/apache-solr-1.2.0.war /opt/tomcat/webapps/solr.war
mkdir /opt/solr-tomcat
cp -r apache-solr-1.2.0/example/solr/ /opt/solr-tomcat/
cd /opt/solr-tomcat
/opt/tomcat/bin/startup.sh
由于在此种情况下(没有设定solr.solr.home环境变量或JNDI的情况下),Solr查找./solr,因此在启动时候需要切换到/opt/solr-tomcat
在当前用户的环境变量中(.bash_profile)或在/opt/tomcat/catalina.sh中添加如下环境变量
export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/opt/solr-tomcat/solr"
mkdir –p /opt/tomcat/conf/Catalina/localhost
touch /opt/tomcat/conf/Catalina/localhost/solr.xml ,内容如下:
<Context docBase="/opt/tomcat/webapps/solr.war" debug="0" crossContext="true" >
<Environment name="solr/home" type="java.lang.String" value="/opt/solr-tomcat/solr" override="true" />
</Context>
访问solr管理界面
Solr对外提供标准的http接口来实现对数据的索引的增加、删除、修改、查询。在 Solr 中,用户通过向部署在servlet 容器中的 Solr Web 应用程序发送 HTTP 请求来启动索引和搜索。Solr 接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。通过 HTTP 以同样的方式返回响应。默认配置返回 Solr 的标准 XML 响应,也可以配置 Solr 的备用响应格式。
可以向 Solr 索引 servlet 传递四个不同的索引请求:
一个典型的Add请求报文
<add>
<doc>
<field name="id">TWINX2048-3200PRO</field>
<field name="name">CORSAIR XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail</field>
<field name="manu">Corsair Microsystems Inc.</field>
<field name="cat">electronics</field>
<field name="cat">memory</field>
<field name="features">CAS latency 2, 2-3-3-6 timing, 2.75v, unbuffered, heat-spreader</field>
<field name="price">185</field>
<field name="popularity">5</field>
<field name="inStock">true</field>
</doc>
<doc>
<field name="id">VS1GB400C3</field>
<field name="name">CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail</field>
<field name="manu">Corsair Microsystems Inc.</field>
<field name="cat">electronics</field>
<field name="cat">memory</field>
<field name="price">74.99</field>
<field name="popularity">7</field>
<field name="inStock">true</field>
</doc>
</add>
一个典型的搜索结果报文:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">6</int>
<lst name="params">
<str name="rows">10</str>
<str name="start">0</str>
<str name="fl">*,score</str>
<str name="hl">true</str>
<str name="q">content:"faceted browsing"</str>
</lst>
</lst>
<result name="response" numFound="1" start="0" maxScore="1.058217">
<doc>
<float name="score">1.058217</float>
<arr name="all">
<str>http://localhost/myBlog/solr-rocks-again.html</str>
<str>Solr is Great</str>
<str>solr,lucene,enterprise,search,greatness</str>
<str>Solr has some really great features, like faceted browsing
and replication</str>
</arr>
<arr name="content">
<str>Solr has some really great features, like faceted browsing
and replication</str>
</arr>
<date name="creationDate">2007-01-07T05:04:00.000Z</date>
<arr name="keywords">
<str>solr,lucene,enterprise,search,greatness</str>
</arr>
<int name="rating">8</int>
<str name="title">Solr is Great</str>
<str name="url">http://localhost/myBlog/solr-rocks-again.html</str>
</doc>
</result>
<lst name="highlighting">
<lst name="http://localhost/myBlog/solr-rocks-again.html">
<arr name="content">
<str>Solr has some really great features, like <em>faceted</em>
<em>browsing</em> and replication</str>
</arr>
</lst>
</lst>
</response>
关于solr的详细使用说明,请参考
http://wiki.apache.org/solr/FrontPage
Solr的安装包包含了相关的测试样例,路径在apache-solr-1.2.0/example/exampledocs
cd apache-solr-1.2.0/example/exampledocs
vi post.sh,根据tomcat的ip、port修改URL变量的值URL=http://localhost:8080/solr/update
./post.sh *.xml #
查看帮助:java -jar post.jar –help
提交测试数据:
java -Durl=http://localhost:8080/solr/update -Ddata=files -jar post.jar *.xml
下面以增加索引字段liangchuan、url为例,说明一下Solr中索引命令的使用
1) 修改solr的schema,配置需要索引字段的说明:
vi /opt/solr-tomcat/solr/conf/schema.xml ,在<fields>中增加如下内容
<field name="liangchuan" type="string" indexed="true" stored="true"/>
<field name="url" type="string" indexed="true" stored="true"/>
2) 创建增加索引请求的xml测试文件
touch /root/apache-solr-1.2.0/example/exampledocs/liangchuan.xml,内容如下:
<add>
<doc>
<field name="id">liangchuan000</field>
<field name="name">Solr, the Enterprise Search Server</field>
<field name="manu">Apache Software Foundation</field>
<field name="liangchuan">liangchuan‘s solr "hello,world" test</field>
<field name="url">http://www.google.com</field>
</doc>
</add>
3) 提交索引请求
cd apache-solr-1.2.0/example/exampledocs
./post.sh liangchuan.xml
4) 查询
通过solr的管理员界面http://localhost:8080/solr/admin查询
或通过curl 测试:
export URL="http://localhost:8080/solr/select/"
curl "$URL?indent=on&q=liangchuan&fl=*,score"
参数 | 描述 | 示例 |
q | Solr 中用来搜索的查询。可以通过追加一个分号和已索引且未进行断词的字段的名称来包含排序信息。默认的排序是 score desc,指按记分降序排序。 |
q=myField:Java AND otherField:developerWorks; date asc |
start | 将初始偏移量指定到结果集中。可用于对结果进行分页。默认值为 0。 |
start=15 |
rows | 返回文档的最大数目。默认值为 10。 | rows=25 |
fq |
提供一个可选的筛选器查询。查询结果被限制为仅搜索筛选器查询返回的结果。筛选过的查询由 Solr 进行缓存。它们对提高复杂查询的速度非常有用。 |
任何可以用 q 参数传递的有效查询,排序信息除外。 |
hl | 当 hl=true 时,在查询响应中醒目显示片段。默认为 false。参看醒目显示参数上的 Solr Wiki 部分可以查看更多选项 | hl=true |
fl | 作为逗号分隔的列表指定文档结果中应返回的 Field 集。默认为 “*”,指所有的字段。“score” 指还应返回记分。 |
*,score |
其中关于Solr查询相关的参数详细的信息请参看:
http://wiki.apache.org/solr/CommonQueryParameters
Solr的查询条件参数q的格式与Lucene相同,具体参看:
http://lucene.apache.org/java/docs/queryparsersyntax.html
在门户社区中需要使用solr,可采用如下模式:
直接采用通过http方式调用solr的接口方式,效率较差,采用solr本身对csv 的支持(http://wiki.apache.org/solr/UpdateCSV
),将数据导出为csv格式,然后调用solr的csv接口http://localhost:8080/solr/update/csv
先将需要索引查询的数据组装成xml格式,然后使用httpclient 将数据提交到solr 的http接口,例如
http://localhost:8080/solr/update
也可以参考post.jar中的SimplePostTool的实现。
http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/util/SimplePostTool.java?view=co
采用庖丁解牛作为solr(Lucene)缺省的中文分词方案
项目库:http://code.google.com/p/paoding/
Google groups:http://groups.google.com/group/paoding
Javaeye的groups:http://analysis.group.javaeye.com/
http://blog.foofactory.fi/2007/02/online-indexing-integrating-nutch-with.html
http://wiki.apache.org/solr/Solrj#EmbeddedSolrServer
http://wiki.apache.org/solr/CollectionDistribution
http://www.ibm.com/developerworks/cn/java/j-solr1/
http://www.ibm.com/developerworks/cn/java/j-solr2/
http://www.xml.com/pub/a/2006/08/09/solr-indexing-xml-with-lucene-andrest.html?page=1
http://lucene.apache.org/java/docs/queryparsersyntax.html
http://www.blogjava.net/RongHao/archive/2007/11/06/158621.html
标签:des Lucene style blog http color java os 使用
原文地址:http://www.cnblogs.com/sand-tiny/p/3934780.html