- 浏览: 1860512 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yeying12:
强大
HTTP协议详解,你所不知道的 -
夏雪纷纷:
据我所知,9月12日有个对于DXperience 2013新功 ...
DXperience 9.1.3 -
Emy:
现在面临第一个坎。。
IT高薪者所具备的人格魅力 -
yangxiutian:
很详细,楼主很会总结。
IE下 z-index 的各种坑 -
idleone:
真心求指教,全选怎么实现
Android开发之ListView,加入CheckBox(复选框),实现选择列表
Solr笔记(1)_概况
<p>一、简洁</p>
<p></p>
<p> Solr是一个开源的,企业级搜索服务器。她已经是一个成熟的产品,用于强化网络站点的搜索功能,包括内部局域网。</p>
<p>她是用Java语言编写。使用HTTP和XML进行数据传输,Java的掌握对于学习Solr不是必须的。除了能返回搜索</p>
<p>结果外,还有包括高亮搜索关键字,方位导航(已广泛用于电子商务网站),查询关键字拼写校验,自动查询建议</p>
<p>和 “类似”查询 帮助更好定位搜索。</p>
<p></p>
<p></p>
<p>二、Lucene,solr的基础引擎</p>
<p></p>
<p> 在相信介绍Solr前,我们先从Apache Lucene开始,Solr的核心基础引擎。Lucene是一个开源的,高效的</p>
<p>文本搜索引擎。Lucene是由Doug Cutting在2000年开发的,并且伴随着强大的在线社区不断进化和成熟。</p>
<p>Lucene不是一个服务器,也不是一个网络爬虫。这一点非常重要,她没有任何配置文件。我们需要编写代码来</p>
<p>存贮和查询在磁盘上的索引。</p>
<p></p>
<p>下面是Lucene的一些主要特征:</p>
<ul>
<li>通过建立基于文本的反向索引来快速查询文件。</li>
<li>通过丰富的文本分析器(analyzers),将字符串形式的文本信息转换为一系列terms,来联系索引和搜索。</li>
<li>一个查询分析器,还有很多能 支持从简单查询到模糊查询 的查询类型(query types)</li>
<li>一个听上去叫Information Retrieval(IR)的得分算法,以产生更多可能的候选结果,有很多灵活的方式来设置得分策略。</li>
<li>在上下文中高亮显示被找到的查询关键字</li>
<li>根据索引内容 来 检查 查询关键字拼写(更多关于查询关键字拼写 可以参考Lucene In Action)</li>
</ul>
<p></p>
<p>三、Solr,是Lucene的服务器化产物</p>
<p></p>
<p>在对Lucene的了解后,Solr可以理解为Lucene的服务器化产品。但她不是对Lucene的一次简单封装,Solr的大多数特征都与Lucene不同。Solr 和 Lucene 的界限经常是模糊的。以下是Solr的主要特性:</p>
<ul>
<li>通过HTTP请求来 建立索引和搜索索引</li>
<li>拥有数个缓存 来 加快搜索速度</li>
<li>一个基于web的管理员控制台</li>
</ul>
<p> 运行时做性能统计,包括缓存 命中/错过 率</p>
<p> 查询表单 来 搜索索引。</p>
<p>以柱状图形式 展示 频繁被查询的关键字</p>
<p> 详细的“得分计算和文本解析”分析。</p>
<ul>
<li>用XML文件的方式 配置搜索计划和服务器</li>
</ul>
<p>通过配置XML 来添加和配置 Lucene的文本分析库</p>
<p> 引入“搜索字段类型”的概念(这个非常重要,然而在Lucne中没有)。类型用作表示日期和一些特殊的排序问题。</p>
<ul>
<li>对最终用户和应用成素,disjunction-max 查询处理器比Lucene基础查询器更实用。</li>
<li>查询结果的分类</li>
<li>拼写检查用于寻找搜索关键字 的类似词,优化查询建议</li>
<li>“更类似于”插件用以列出 于查询结果类似的 备选结果。</li>
<li>Solr支持分布式来应对较大规模的部署。</li>
</ul>
<p>以上特征都会在下面的章节内详述。</p>
<p></p>
<p></p>
<p>四、Solr 于数据库技术的比较</p>
<p></p>
<p>对于开发人员而言,数据库技术(特别是关系数据库)已经成为一个必须学习的知识。数据库和Lucene的搜索索引并没有显著的不同。假设我们已经非常熟悉数据库知识,现在来描述下她和Lucene有什么不同。(这里来帮助更好了解Solr)</p>
<p></p>
<p>最大的不同是,Lucene可以理解为一个 只有一张简单表格 的数据库,没有任何的关系查询(即JOINS)。这听上去很疯狂,不过记住索引只是为了去支持搜索,而不是去标识一条数据。所以数据库可以去遵守“第三范式”,而索引就不会如此,表格中尽可能多的包含会被搜索到的数据而已。用来补充单表的是,一个域(列)中可以有多值。</p>
<p></p>
<p>其他一些显著的不同:</p>
<ul>
<li>更新(Update):整个文档可以被删除,然后再添加,但不能被更新。</li>
<li>子字符串搜索与文本搜索:例如“Books”,数据库的Like匹配出“CookBooks”、“MyBooks”。Lucene基于查询分析器的配置,可以查到更多形式的词匹配“Books”,比如book(这里是大小写被忽略),甚至发音相似的词。运用ngram技术,她可以提取部分搜索条件的词干进行匹配。</li>
<li>结果打分:Lucene的强大在于她可以根据结果的匹配程度来打分。例如查询条件中有部分是可选的(OR search),那匹配程度高的文档会得到更多的分。有一些其他因素,可以调整打分的方式。然而,数据库就没有这个功能,只是匹配或不匹配。Lucene也可以在需要的时候对结果进行排序。</li>
<li>延迟提交:Solr的搜索速度通过建立缓存得以优化。当一个完成的文档需要被提交,所有的缓存会重新构建,根据其他一些因素,这可能花费几秒到一分钟。</li>
</ul>
<p></p>
<p>五、正式开始Solr</p>
<p></p>
<p>Solr是用Java编写的,不过我们不需要对Java非常了解。如果需要扩展Solr的功能,那我们需要了解Java。</p>
<p>我们需要掌握的是命令行操作,包括Dos和Unix。</p>
<p></p>
<p>在正式开始前,我们可能需要安装以下一些包:</p>
<ul>
<li>A Java Development Kit(JDK) v1.5 or later.</li>
<li>Apache Ant: Any recent version</li>
<li>Subversion or Git for source control of Solr: svn 或 git</li>
<li>Any Java EE servlet Engine app-server:Sole 已经自带了Jetty。</li>
<li>Solr:<a href="http://lucene.apache.org/solr">http://lucene.apache.org/solr</a> ,现在官方是1.4版本。也可以去取源代码获得最新版本。(经过单元和集成测试,也是非常稳定和可靠的),通过 svn co <a href="http://svn.apache.org/repos/asf/lucene/solr/trunk/">http://svn.apache.org/repos/asf/lucene/solr/trunk/</a> solr_svn 将最新的源代码下载到本地solr_svn目录下。</li>
</ul>
<p>Solr 发布包下的目录结构:</p>
<ul>
<li>client::包含特定的编程语言与Solr通信。这里其实只有Ruby的例子。Java的客户端在src/solrj</li>
<li>dist:这里包含Solr的Jar包和War包</li>
<li>example:这里有Jetty安装所需要的包(Solr自带Jetty),包括一些样本数据和Solr的配置文件。</li>
</ul>
<p>example/etc:Jetty的配置文件。可以修改监听端口(默认8983)</p>
<p> example/multicore:多核环境下,solr的根目录(后面会具体讨论)</p>
<p> example/solr:默认环境下的solr根目录</p>
<p> example/webapps:Solr的WAR包部署在这里</p>
<ul>
<li>lib:所有Solr依赖的包。一大部分是Lucene,一些Apache常用的工具包,和Stax(XML处理相关)</li>
<li>src:各种源码。可以归为以下几个重要目录:</li>
</ul>
<p> src/java:Solr的源代码,用Java编写。</p>
<p>src/scripts:Unix的bash shell脚本,应用与在大型应用中部署多个Solr服务。</p>
<p> src/solrj:Solr Java的客户端。</p>
<p> src/webapp:Solr web端的管理员用户界面,包括Servlets和JSP。这些其实也都是War中的内容。</p>
<p></p>
<p>注意:要看Java源码的话,src/java下是主要的Solr源码;src/common下是一部分通用类,供server端和solrj客户端;src/test中是测试代码;src/webapp/src下是servlet代码;</p>
<p></p>
<p>六、Solr的根目录</p>
<p></p>
<p>Solr的根目录下包括Solr的配置和运行Solr实例需要的数据。</p>
<p>Sole有一个样例根目录,在example/solr下,我们将会使用这个</p>
<p>另一个更技术层面的,在example/solr下,也是Solr的一个根目录不过是用在多核的环境下,稍后讨论。</p>
<p></p>
<p>让我们来看下根目录下有些什么:</p>
<ul>
<li>bin:如果想自己设置Solr,这里可以放脚本。</li>
<li>conf:配置文件。下面的2个文件很重要,这个文件夹下还包括一些其他文件,都是被这2个文件引用,为了一些其他配置,比如文本分析的细节。</li>
</ul>
<p> conf/schema.xml:这里是索引的概要,包括 域类型(field type)定义和相关分析器链。</p>
<p> conf/sorconfig.xml:这是Solr配置的主文件。</p>
<p> conf/xslt:这个目录薄厚一些XSLT文件,用来把Solr搜索结果(XML)转换为其他形式,例如Atom/RSS。</p>
<ul>
<li>data:包含Lucene的索引数据,Solr自动生成。这些都是二进制数据(binary),我们基本不会去动它,除非需要删除。</li>
<li>lib:一些额外的,可选的Java Jar包,Solr会在启动时调用。当你不是通过修改Solr源码 强化Solr的一些功能,可以将包放在这里。</li>
</ul>
<p></p>
<p>七、Solr如何找到自己的根目录</p>
<p></p>
<p>Solr启动后的第一件事是从根目录加载配置信息。这可以通过好几种方式来指定。</p>
<ul>
<li>Solr先从Java的系统环境变量中搜寻 solr.solr.home这个变量。通常通过命令行设置,如启动Jetty时:java -Dsolr.solr.home = solr/ -jar start .jar ;也可以用JNDI 绑定路径到java:comp/env/solr/home,可以设置web.xml来让app-server维护这个变量(src/web-app/web/WEB-INF)</li>
</ul>
<p><textarea cols="50" rows="7" name="code" class="xhtml"><env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>solr/</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry></textarea></p>
<p></p>
<p>这里修改了web.xml,需要使用ant dist-war重新打包部署。这里仅仅如此还不够,需要设置JNDI,这里就不深入了。</p>
<p>PS:JNDI需要设置2个环境变量,具体查看EJB相关笔记。</p>
<ul>
<li>如果根目录没有设置在环境变量或JNDI中,默认地址是 solr/。我们后面会沿用这个地址。(具体产品还是需要配置来设定,比较安全,可以使用绝对或相对路径)</li>
</ul>
<p>设置完根路径后,在Solr启动中的log会显示:</p>
<p>Aug 7, 2008 4:59:35 PM org.apache.solr.core.Config getInstanceDir<br>INFO: Solr home defaulted to 'null' (could not find system property or JNDI)<br>Aug 7, 2008 4:59:35 PM org.apache.solr.core.Config setInstanceDir<br>INFO: Solr home set to 'solr/'</p>
<p></p>
<p></p>
<p>八、部署和运行Solr</p>
<p></p>
<p>部署就是apach-solr-1.4.war。这里不包含Solr的根目录。</p>
<p></p>
<p>这里我们以自带的Jetty为例子,进入example目录</p>
<p></p>
<p>cd example</p>
<p>java -jar start.jar</p>
<p></p>
<p>看到下面这句日志,即启动完成:</p>
<p>2010-07-09 15:31:06.377::INFO: Started SocketConnector @ 0.0.0.0:8983</p>
<p>在控制台点击Ctrl-C 可以关闭服务器。</p>
<p></p>
<p>0.0.0.0表示她监听来自任务主机的请求,8983是端口号。</p>
<p>此时,可以进入连接:<a href="http://localhost:8983/solr">http://localhost:8983/solr</a>,如果启动失败会显示原因,如果成功即可看到管理员入口(<a href="http://localhost:8983/solr/admin/">http://localhost:8983/solr/admin/</a>)。</p>
<p></p>
<p></p>
<p>九、简单浏览下Solr</p>
<p></p>
<p><img src="http://hi.csdn.net/attachment/201007/9/0_1278667180bOAE.gif" alt=""></p>
<p></p>
<p>顶部灰色部分:</p>
<ul>
<li>头部信息,当启动多个Solr实例时,可以帮助了解在操作哪个实例。IP地址和端口号都是可见的。</li>
<li>example(Admin旁边)是对这个schema的引用,仅仅是标识这个schema。如果你有很多schema,可以用这个标识去区分。</li>
<li>当前工作目录(cwd) ,和Solr的根目录(SolrHome)。</li>
</ul>
<p>导航栏上的功能:</p>
<ul>
<li>SCHEMA:显示当前的schema的配置文件。(不同浏览器显示可能不同,Firefox会高亮显示语法关键字)</li>
<li>CONFIG:显示当前的Solr config文件。</li>
<li>ANALYSIS:她用来诊断潜在的 文本分析 的查询/索引问题。这是高级功能,稍后做讨论。</li>
<li>SCHEMA BROWSER:这是一个简洁的 反映当前索引中实际存放数据的 视图,稍后做讨论。</li>
<li>STATISTICS:这里是 时间和缓存命中率统计。稍后做讨论。</li>
<li>INFO:她列出了Solr当前应用组件的版本信息,不是很常用。</li>
<li>DISTRIBUTION:这里包含了分布式/复制的状态信息,稍后讨论。</li>
<li>PING:可以忽略,她用来在分布式模式下提供健壮性检查。</li>
<li>LOGGING:可以在这里设置Solr不同部分的Logging levels。在Jetty下,输出的信息都在控制台。(Solr使用SLF4j)</li>
<li>JAVA PROPERTIES:列出了JAVA系统环境变量。</li>
<li>THREAD DUMP:这里显示了Java中的线程信息,帮助诊断问题。</li>
<li>FULL INTERFACE:一个更多选择的查询表单,可以帮助诊断问题。这个表单也是能力有限的,只能提交一小部分搜索选项给Solr</li>
</ul>
<p>Assistance 部分包括一些在线的帮助信息。</p>
<p></p>
<p></p>
<p>十、装在示例数据</p>
<p></p>
<p>Solr有一些示例数据和装载脚本,在example/exampledocs下。</p>
<p></p>
<p>进入example/exampledoce下,输入:</p>
<p></p>
<p>java -jar post.jar *.xml (如果在unix环境下,就运行post.sh)</p>
<p></p>
<p>post.jar是一个简单的程序,会遍历所有的参数(这里就是*.xml),然后对本机正运行的Solr(example)服务器的默认配置(<a href="http://localhost:8983/solr/update">http://localhost:8983/solr/update</a>) 发送post请求(HTTP)。这里可以看下post.sh,就可以了解在干什么了。</p>
<p>可以在控制台命令行中看到发送的文件:</p>
<p>SimplePostTool: POSTing files to <a href="http://localhost:8983/solr/update">http://localhost:8983/solr/update</a>..<br>SimplePostTool: POSTing file hd.xml<br>SimplePostTool: POSTing file ipod_other.xml<br>SimplePostTool: POSTing file ipod_video.xml<br>SimplePostTool: POSTing file mem.xml<br>SimplePostTool: POSTing file monitor.xml<br>SimplePostTool: POSTing file monitor2.xml<br>SimplePostTool: POSTing file mp500.xml<br>SimplePostTool: POSTing file payload.xml<br>SimplePostTool: POSTing file sd500.xml<br>SimplePostTool: POSTing file solr.xml<br>SimplePostTool: POSTing file utf8-example.xml<br>SimplePostTool: POSTing file vidcard.xml<br>SimplePostTool: COMMITting Solr index changes..</p>
<p>最后一行会执行commit操作,保证之前的文档都被保存,并可见。</p>
<p></p>
<p>理论上post.sh 和 post.jar是可以用在产品脚本上的,但这里仅仅用作示例。</p>
<p></p>
<p>这里取其中一个文件monitor.xml 看下:</p>
<p></p>
<p><textarea cols="75" rows="15" name="code" class="xhtml"><add>
<doc>
<field name="id">3007WFP</field>
<field name="name">Dell Widescreen UltraSharp 3007WFP</field>
<field name="manu">Dell, Inc.</field>
<field name="cat">electronics</field>
<field name="cat">monitor</field>
<field name="features">30" TFT active matrix LCD, 2560 x 1600,
.25mm dot pitch, 700:1 contrast</field>
<field name="includes">USB cable</field>
<field name="weight">401.6</field>
<field name="price">2199</field>
<field name="popularity">6</field>
<field name="inStock">true</field>
</doc>
</add></textarea></p>
<p></p>
<p>这个发送给Solr的文件非常简单。这里只用了一些简单的标签,不过都是非常重要的。</p>
<p><add>标签中可以放置多个<doc>标签(一个doc代表一个document),在大量数据装载时这样做能提高性能。</p>
<p>Solr在每个POST请求中都会收到一个<commit/>标签。更多的一些特性会在之后介绍。</p>
<p></p>
<p></p>
<p>十一、一次简单的搜索。</p>
<p></p>
<p>在管理员界面,让我们运行一次简单的搜索。</p>
<p></p>
<p>在管理员界面,点击查询按钮,或进入FULL INTERFACE再作更详细的查询。</p>
<p>在我们查看XML输出文件之前,先看下URL和参数信息:</p>
<p><a href="http://localhost:8983/solr/select/?q=monitor&version=2.2&start=0&rows=10&indent=on">http://localhost:8983/solr/select/?q=monitor&version=2.2&start=0&rows=10&indent=on</a>.</p>
<p>然后浏览器中会显示输出的用XML标识的搜索结果,如下:</p>
<p><textarea cols="81" rows="24" name="code" class="xhtml"><?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">3</int><!--查询耗时(毫秒)Solr有一些缓存(保存过去的搜索结果),提高了搜索效率-->
<lst name="params"><!--查询的参数-->
<str name="indent">on</str><!--是否缩进XML文件-->
<str name="rows">10</str><!--返回的结果条数-->
<str name="start">0</str><!--搜索结果的开始位置-->
<str name="q">monitor</str>
<str name="version">2.2</str><!--版本信息-->
</lst>
</lst>
<!--numFound是找到几条,start从第几条开始显示-->
<!--这里并没有显示得分情况(非full interface),但结果其实已经按照得分排序了(Solr默认)-->
<!--如果是full interface查询,result会包括maxScore属性,标识最高得分-->
<result name="response" numFound="2" start="0">
<doc>
<!--如果是full interface查询,这里会有得分情况(默认)
<float name="score">0.5747526</float>
-->
<!--默认情况Solr会列出所有存储的fields
(不是所有field都需要存储,虽然可能根据它来查索引,但不用包含在就结果中)
-->
<!--
注意,某些field是多值的,由arr标签标记的
-->
<arr name="cat"><str>electronics</str><str>monitor</str></arr>
<arr name="features"><str>30" TFT active matrix LCD, 2560 x 1600,
.25mm dot pitch, 700:1 contrast</str></arr>
<str name="id">3007WFP</str>
<bool name="inStock">true</bool>
<str name="includes">USB cable</str>
<str name="manu">Dell, Inc.</str>
<str name="name">Dell Widescreen UltraSharp 3007WFP</str>
<int name="popularity">6</int>
<float name="price">2199.0</float>
<str name="sku">3007WFP</str>
<arr name="spell"><str>Dell Widescreen UltraSharp 3007WFP</str>
</arr>
<date name="timestamp">2008-08-09T03:56:41.487Z</date>
<float name="weight">401.6</float>
</doc>
<doc>
...
</doc>
</result>
</response>
</textarea></p>
<p></p>
<p>这只是一个简单的查询结果,可以加入例如高亮显示等查询条件,然后在result标记后会有更多信息。</p>
<p></p>
<p>十二、一些统计信息</p>
<p></p>
<p>进入<a href="http://localhost:8983/solr/admin/stats.jsp">http://localhost:8983/solr/admin/stats.jsp</a>。</p>
<p></p>
<p>在这里,当我们没有加载任何数据时,numDocs显示0,而现在显示19。</p>
<p>maxDocs的值取决于当你删除一个文档但却没有提交。</p>
<p></p>
<p>可以关注以下的一些handler:</p>
<p>/update,standard。</p>
<p></p>
<p>注意:这些统计信息都是实时的,不在磁盘上做保存。</p>
<p></p>
<p></p>
<p>十三、solrconfig.xml</p>
<p></p>
<p>这里包含很多我们可以研究的参数,现在先让我们看下<requestHandler>下定义的 request handers。</p>
<p></p>
<p><textarea cols="67" rows="12" name="code" class="xhtml"><requestHandler name="standard" class="solr.SearchHandler"
default="true">
<!-- default values for query parameters -->
<lst name="defaults">
<!--是否显示参数,none(都不显示),all(全显示,可以看到一些隐藏参数)-->
<str name="echoParams">explicit</str>
<!--
<int name="rows">10</int>
<str name="fl">*</str>
<str name="version">2.1</str>
-->
</lst>
</requestHandler></textarea></p>
<p></p>
<p>当我们通过POST通知Solr(如索引一个文档)或通过GET搜索,都会有个特定的request hander做处理。</p>
<p>这些handers可以通过URL来注册。之前我们加载文档时,Solr通过以下注册的handler做处理:</p>
<p><requestHandler name="/update" class="solr.XmlUpdateRequestHandler" /></p>
<p></p>
<p>而当使用搜索时,是使用solr.SearchHandler(上面的XML定义了)</p>
<p>通过URL参数或POST中的参数,都可以调用这些request handler</p>
<p>也可以在solrconfig.xml中通过default,appends,invariants来指定。</p>
<p>这里的一些参数等于是默认的,就像已经放在了URL后面的参数一样。</p>
<p></p>
<p></p>
<p>十四、一些重要的Solr资源</p>
<p></p>
<ul>
<li>Solr's Wiki:<a href="http://wiki.apache.org/solr/">http://wiki.apache.org/solr/</a> 有很多文档,以wiki的方式陈列。</li>
<li>mailling lists of Solr:<a href="http://www.lucidimagination.com/search/">http://www.lucidimagination.com/search/</a> 很多有价值的信息。(建议订阅Solr-users mailing list)</li>
<li>Solr's issue tracker:<a href="http://issues.apache.org/jira/browse/SOLR">http://issues.apache.org/jira/browse/SOLR</a>,安装JIRA。可以看到一些bug和能力增强信息。</li>
</ul>
<p>十五、查询参数</p>
<p></p>
<p><span><span>fl=*,score&q.op=</span><span class="op"><span style="color: #808080;">AND</span></span><span>&start=0&</span><span class="keyword"><strong><span style="color: #7f0055;">rows</span></strong></span><span>=16&hl=</span><span class="keyword"><strong><span style="color: #7f0055;">true</span></strong></span><span>&hl.fl=merHeading&hl.snippets=3&hl.simple.pre=<fontcolor=red>&hl.simple.post=</font>&facet=</span><span class="keyword"><strong><span style="color: #7f0055;">true</span></strong></span><span>&facet.field=merCategory&q=+(merHeading%3A%E4%BD%A0%E5%A5%BD+</span><span class="op"><span style="color: #808080;">AND</span></span><span>+merHeadingWithWord%3A%E6%BD%98)+merActualendTime:[1239264030468</span><span class="keyword"><strong><span style="color: #7f0055;">TO</span></strong></span><span>1240473630468]&sort=merActualendTime</span><span class="keyword"><strong><span style="color: #7f0055;">asc</span></strong></span><span></span></span></p>
<p></p>
<p><span><span>fl表示索引显示那些field(*表示所有field, score 是solr 的一个匹配热度) <br>q.op 表示q 中 查询语句的 各条件的逻辑操作 AND(与) OR(或) <br>start 开始返回条数 <br>rows 返回多少条 <br>hl 是否高亮 <br>hl.fl 高亮field <br>hl.snippets 不太清楚(反正是设置高亮3就可以了) <br>hl.simple.pre 高亮前面的格式 <br>hl.simple.post 高亮后面的格式 <br>facet 是否启动统计 <br>facet.field 统计field <br>q 查询语句(类似SQL) 相关详细的操作还需lucene 的query 语法 <br>sort 排序 <br></span></span></p>
<p></p>
<p>十六、删除索引</p>
<p></p>
<p><span class="string">post "<delete><id>42</id></delete>"</span><span></span></p>
<p></p>
<p> Solr是一个开源的,企业级搜索服务器。她已经是一个成熟的产品,用于强化网络站点的搜索功能,包括内部局域网。</p>
<p>她是用Java语言编写。使用HTTP和XML进行数据传输,Java的掌握对于学习Solr不是必须的。除了能返回搜索</p>
<p>结果外,还有包括高亮搜索关键字,方位导航(已广泛用于电子商务网站),查询关键字拼写校验,自动查询建议</p>
<p>和 “类似”查询 帮助更好定位搜索。</p>
<p></p>
<p></p>
<p>二、Lucene,solr的基础引擎</p>
<p></p>
<p> 在相信介绍Solr前,我们先从Apache Lucene开始,Solr的核心基础引擎。Lucene是一个开源的,高效的</p>
<p>文本搜索引擎。Lucene是由Doug Cutting在2000年开发的,并且伴随着强大的在线社区不断进化和成熟。</p>
<p>Lucene不是一个服务器,也不是一个网络爬虫。这一点非常重要,她没有任何配置文件。我们需要编写代码来</p>
<p>存贮和查询在磁盘上的索引。</p>
<p></p>
<p>下面是Lucene的一些主要特征:</p>
<ul>
<li>通过建立基于文本的反向索引来快速查询文件。</li>
<li>通过丰富的文本分析器(analyzers),将字符串形式的文本信息转换为一系列terms,来联系索引和搜索。</li>
<li>一个查询分析器,还有很多能 支持从简单查询到模糊查询 的查询类型(query types)</li>
<li>一个听上去叫Information Retrieval(IR)的得分算法,以产生更多可能的候选结果,有很多灵活的方式来设置得分策略。</li>
<li>在上下文中高亮显示被找到的查询关键字</li>
<li>根据索引内容 来 检查 查询关键字拼写(更多关于查询关键字拼写 可以参考Lucene In Action)</li>
</ul>
<p></p>
<p>三、Solr,是Lucene的服务器化产物</p>
<p></p>
<p>在对Lucene的了解后,Solr可以理解为Lucene的服务器化产品。但她不是对Lucene的一次简单封装,Solr的大多数特征都与Lucene不同。Solr 和 Lucene 的界限经常是模糊的。以下是Solr的主要特性:</p>
<ul>
<li>通过HTTP请求来 建立索引和搜索索引</li>
<li>拥有数个缓存 来 加快搜索速度</li>
<li>一个基于web的管理员控制台</li>
</ul>
<p> 运行时做性能统计,包括缓存 命中/错过 率</p>
<p> 查询表单 来 搜索索引。</p>
<p>以柱状图形式 展示 频繁被查询的关键字</p>
<p> 详细的“得分计算和文本解析”分析。</p>
<ul>
<li>用XML文件的方式 配置搜索计划和服务器</li>
</ul>
<p>通过配置XML 来添加和配置 Lucene的文本分析库</p>
<p> 引入“搜索字段类型”的概念(这个非常重要,然而在Lucne中没有)。类型用作表示日期和一些特殊的排序问题。</p>
<ul>
<li>对最终用户和应用成素,disjunction-max 查询处理器比Lucene基础查询器更实用。</li>
<li>查询结果的分类</li>
<li>拼写检查用于寻找搜索关键字 的类似词,优化查询建议</li>
<li>“更类似于”插件用以列出 于查询结果类似的 备选结果。</li>
<li>Solr支持分布式来应对较大规模的部署。</li>
</ul>
<p>以上特征都会在下面的章节内详述。</p>
<p></p>
<p></p>
<p>四、Solr 于数据库技术的比较</p>
<p></p>
<p>对于开发人员而言,数据库技术(特别是关系数据库)已经成为一个必须学习的知识。数据库和Lucene的搜索索引并没有显著的不同。假设我们已经非常熟悉数据库知识,现在来描述下她和Lucene有什么不同。(这里来帮助更好了解Solr)</p>
<p></p>
<p>最大的不同是,Lucene可以理解为一个 只有一张简单表格 的数据库,没有任何的关系查询(即JOINS)。这听上去很疯狂,不过记住索引只是为了去支持搜索,而不是去标识一条数据。所以数据库可以去遵守“第三范式”,而索引就不会如此,表格中尽可能多的包含会被搜索到的数据而已。用来补充单表的是,一个域(列)中可以有多值。</p>
<p></p>
<p>其他一些显著的不同:</p>
<ul>
<li>更新(Update):整个文档可以被删除,然后再添加,但不能被更新。</li>
<li>子字符串搜索与文本搜索:例如“Books”,数据库的Like匹配出“CookBooks”、“MyBooks”。Lucene基于查询分析器的配置,可以查到更多形式的词匹配“Books”,比如book(这里是大小写被忽略),甚至发音相似的词。运用ngram技术,她可以提取部分搜索条件的词干进行匹配。</li>
<li>结果打分:Lucene的强大在于她可以根据结果的匹配程度来打分。例如查询条件中有部分是可选的(OR search),那匹配程度高的文档会得到更多的分。有一些其他因素,可以调整打分的方式。然而,数据库就没有这个功能,只是匹配或不匹配。Lucene也可以在需要的时候对结果进行排序。</li>
<li>延迟提交:Solr的搜索速度通过建立缓存得以优化。当一个完成的文档需要被提交,所有的缓存会重新构建,根据其他一些因素,这可能花费几秒到一分钟。</li>
</ul>
<p></p>
<p>五、正式开始Solr</p>
<p></p>
<p>Solr是用Java编写的,不过我们不需要对Java非常了解。如果需要扩展Solr的功能,那我们需要了解Java。</p>
<p>我们需要掌握的是命令行操作,包括Dos和Unix。</p>
<p></p>
<p>在正式开始前,我们可能需要安装以下一些包:</p>
<ul>
<li>A Java Development Kit(JDK) v1.5 or later.</li>
<li>Apache Ant: Any recent version</li>
<li>Subversion or Git for source control of Solr: svn 或 git</li>
<li>Any Java EE servlet Engine app-server:Sole 已经自带了Jetty。</li>
<li>Solr:<a href="http://lucene.apache.org/solr">http://lucene.apache.org/solr</a> ,现在官方是1.4版本。也可以去取源代码获得最新版本。(经过单元和集成测试,也是非常稳定和可靠的),通过 svn co <a href="http://svn.apache.org/repos/asf/lucene/solr/trunk/">http://svn.apache.org/repos/asf/lucene/solr/trunk/</a> solr_svn 将最新的源代码下载到本地solr_svn目录下。</li>
</ul>
<p>Solr 发布包下的目录结构:</p>
<ul>
<li>client::包含特定的编程语言与Solr通信。这里其实只有Ruby的例子。Java的客户端在src/solrj</li>
<li>dist:这里包含Solr的Jar包和War包</li>
<li>example:这里有Jetty安装所需要的包(Solr自带Jetty),包括一些样本数据和Solr的配置文件。</li>
</ul>
<p>example/etc:Jetty的配置文件。可以修改监听端口(默认8983)</p>
<p> example/multicore:多核环境下,solr的根目录(后面会具体讨论)</p>
<p> example/solr:默认环境下的solr根目录</p>
<p> example/webapps:Solr的WAR包部署在这里</p>
<ul>
<li>lib:所有Solr依赖的包。一大部分是Lucene,一些Apache常用的工具包,和Stax(XML处理相关)</li>
<li>src:各种源码。可以归为以下几个重要目录:</li>
</ul>
<p> src/java:Solr的源代码,用Java编写。</p>
<p>src/scripts:Unix的bash shell脚本,应用与在大型应用中部署多个Solr服务。</p>
<p> src/solrj:Solr Java的客户端。</p>
<p> src/webapp:Solr web端的管理员用户界面,包括Servlets和JSP。这些其实也都是War中的内容。</p>
<p></p>
<p>注意:要看Java源码的话,src/java下是主要的Solr源码;src/common下是一部分通用类,供server端和solrj客户端;src/test中是测试代码;src/webapp/src下是servlet代码;</p>
<p></p>
<p>六、Solr的根目录</p>
<p></p>
<p>Solr的根目录下包括Solr的配置和运行Solr实例需要的数据。</p>
<p>Sole有一个样例根目录,在example/solr下,我们将会使用这个</p>
<p>另一个更技术层面的,在example/solr下,也是Solr的一个根目录不过是用在多核的环境下,稍后讨论。</p>
<p></p>
<p>让我们来看下根目录下有些什么:</p>
<ul>
<li>bin:如果想自己设置Solr,这里可以放脚本。</li>
<li>conf:配置文件。下面的2个文件很重要,这个文件夹下还包括一些其他文件,都是被这2个文件引用,为了一些其他配置,比如文本分析的细节。</li>
</ul>
<p> conf/schema.xml:这里是索引的概要,包括 域类型(field type)定义和相关分析器链。</p>
<p> conf/sorconfig.xml:这是Solr配置的主文件。</p>
<p> conf/xslt:这个目录薄厚一些XSLT文件,用来把Solr搜索结果(XML)转换为其他形式,例如Atom/RSS。</p>
<ul>
<li>data:包含Lucene的索引数据,Solr自动生成。这些都是二进制数据(binary),我们基本不会去动它,除非需要删除。</li>
<li>lib:一些额外的,可选的Java Jar包,Solr会在启动时调用。当你不是通过修改Solr源码 强化Solr的一些功能,可以将包放在这里。</li>
</ul>
<p></p>
<p>七、Solr如何找到自己的根目录</p>
<p></p>
<p>Solr启动后的第一件事是从根目录加载配置信息。这可以通过好几种方式来指定。</p>
<ul>
<li>Solr先从Java的系统环境变量中搜寻 solr.solr.home这个变量。通常通过命令行设置,如启动Jetty时:java -Dsolr.solr.home = solr/ -jar start .jar ;也可以用JNDI 绑定路径到java:comp/env/solr/home,可以设置web.xml来让app-server维护这个变量(src/web-app/web/WEB-INF)</li>
</ul>
<p><textarea cols="50" rows="7" name="code" class="xhtml"><env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>solr/</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry></textarea></p>
<p></p>
<p>这里修改了web.xml,需要使用ant dist-war重新打包部署。这里仅仅如此还不够,需要设置JNDI,这里就不深入了。</p>
<p>PS:JNDI需要设置2个环境变量,具体查看EJB相关笔记。</p>
<ul>
<li>如果根目录没有设置在环境变量或JNDI中,默认地址是 solr/。我们后面会沿用这个地址。(具体产品还是需要配置来设定,比较安全,可以使用绝对或相对路径)</li>
</ul>
<p>设置完根路径后,在Solr启动中的log会显示:</p>
<p>Aug 7, 2008 4:59:35 PM org.apache.solr.core.Config getInstanceDir<br>INFO: Solr home defaulted to 'null' (could not find system property or JNDI)<br>Aug 7, 2008 4:59:35 PM org.apache.solr.core.Config setInstanceDir<br>INFO: Solr home set to 'solr/'</p>
<p></p>
<p></p>
<p>八、部署和运行Solr</p>
<p></p>
<p>部署就是apach-solr-1.4.war。这里不包含Solr的根目录。</p>
<p></p>
<p>这里我们以自带的Jetty为例子,进入example目录</p>
<p></p>
<p>cd example</p>
<p>java -jar start.jar</p>
<p></p>
<p>看到下面这句日志,即启动完成:</p>
<p>2010-07-09 15:31:06.377::INFO: Started SocketConnector @ 0.0.0.0:8983</p>
<p>在控制台点击Ctrl-C 可以关闭服务器。</p>
<p></p>
<p>0.0.0.0表示她监听来自任务主机的请求,8983是端口号。</p>
<p>此时,可以进入连接:<a href="http://localhost:8983/solr">http://localhost:8983/solr</a>,如果启动失败会显示原因,如果成功即可看到管理员入口(<a href="http://localhost:8983/solr/admin/">http://localhost:8983/solr/admin/</a>)。</p>
<p></p>
<p></p>
<p>九、简单浏览下Solr</p>
<p></p>
<p><img src="http://hi.csdn.net/attachment/201007/9/0_1278667180bOAE.gif" alt=""></p>
<p></p>
<p>顶部灰色部分:</p>
<ul>
<li>头部信息,当启动多个Solr实例时,可以帮助了解在操作哪个实例。IP地址和端口号都是可见的。</li>
<li>example(Admin旁边)是对这个schema的引用,仅仅是标识这个schema。如果你有很多schema,可以用这个标识去区分。</li>
<li>当前工作目录(cwd) ,和Solr的根目录(SolrHome)。</li>
</ul>
<p>导航栏上的功能:</p>
<ul>
<li>SCHEMA:显示当前的schema的配置文件。(不同浏览器显示可能不同,Firefox会高亮显示语法关键字)</li>
<li>CONFIG:显示当前的Solr config文件。</li>
<li>ANALYSIS:她用来诊断潜在的 文本分析 的查询/索引问题。这是高级功能,稍后做讨论。</li>
<li>SCHEMA BROWSER:这是一个简洁的 反映当前索引中实际存放数据的 视图,稍后做讨论。</li>
<li>STATISTICS:这里是 时间和缓存命中率统计。稍后做讨论。</li>
<li>INFO:她列出了Solr当前应用组件的版本信息,不是很常用。</li>
<li>DISTRIBUTION:这里包含了分布式/复制的状态信息,稍后讨论。</li>
<li>PING:可以忽略,她用来在分布式模式下提供健壮性检查。</li>
<li>LOGGING:可以在这里设置Solr不同部分的Logging levels。在Jetty下,输出的信息都在控制台。(Solr使用SLF4j)</li>
<li>JAVA PROPERTIES:列出了JAVA系统环境变量。</li>
<li>THREAD DUMP:这里显示了Java中的线程信息,帮助诊断问题。</li>
<li>FULL INTERFACE:一个更多选择的查询表单,可以帮助诊断问题。这个表单也是能力有限的,只能提交一小部分搜索选项给Solr</li>
</ul>
<p>Assistance 部分包括一些在线的帮助信息。</p>
<p></p>
<p></p>
<p>十、装在示例数据</p>
<p></p>
<p>Solr有一些示例数据和装载脚本,在example/exampledocs下。</p>
<p></p>
<p>进入example/exampledoce下,输入:</p>
<p></p>
<p>java -jar post.jar *.xml (如果在unix环境下,就运行post.sh)</p>
<p></p>
<p>post.jar是一个简单的程序,会遍历所有的参数(这里就是*.xml),然后对本机正运行的Solr(example)服务器的默认配置(<a href="http://localhost:8983/solr/update">http://localhost:8983/solr/update</a>) 发送post请求(HTTP)。这里可以看下post.sh,就可以了解在干什么了。</p>
<p>可以在控制台命令行中看到发送的文件:</p>
<p>SimplePostTool: POSTing files to <a href="http://localhost:8983/solr/update">http://localhost:8983/solr/update</a>..<br>SimplePostTool: POSTing file hd.xml<br>SimplePostTool: POSTing file ipod_other.xml<br>SimplePostTool: POSTing file ipod_video.xml<br>SimplePostTool: POSTing file mem.xml<br>SimplePostTool: POSTing file monitor.xml<br>SimplePostTool: POSTing file monitor2.xml<br>SimplePostTool: POSTing file mp500.xml<br>SimplePostTool: POSTing file payload.xml<br>SimplePostTool: POSTing file sd500.xml<br>SimplePostTool: POSTing file solr.xml<br>SimplePostTool: POSTing file utf8-example.xml<br>SimplePostTool: POSTing file vidcard.xml<br>SimplePostTool: COMMITting Solr index changes..</p>
<p>最后一行会执行commit操作,保证之前的文档都被保存,并可见。</p>
<p></p>
<p>理论上post.sh 和 post.jar是可以用在产品脚本上的,但这里仅仅用作示例。</p>
<p></p>
<p>这里取其中一个文件monitor.xml 看下:</p>
<p></p>
<p><textarea cols="75" rows="15" name="code" class="xhtml"><add>
<doc>
<field name="id">3007WFP</field>
<field name="name">Dell Widescreen UltraSharp 3007WFP</field>
<field name="manu">Dell, Inc.</field>
<field name="cat">electronics</field>
<field name="cat">monitor</field>
<field name="features">30" TFT active matrix LCD, 2560 x 1600,
.25mm dot pitch, 700:1 contrast</field>
<field name="includes">USB cable</field>
<field name="weight">401.6</field>
<field name="price">2199</field>
<field name="popularity">6</field>
<field name="inStock">true</field>
</doc>
</add></textarea></p>
<p></p>
<p>这个发送给Solr的文件非常简单。这里只用了一些简单的标签,不过都是非常重要的。</p>
<p><add>标签中可以放置多个<doc>标签(一个doc代表一个document),在大量数据装载时这样做能提高性能。</p>
<p>Solr在每个POST请求中都会收到一个<commit/>标签。更多的一些特性会在之后介绍。</p>
<p></p>
<p></p>
<p>十一、一次简单的搜索。</p>
<p></p>
<p>在管理员界面,让我们运行一次简单的搜索。</p>
<p></p>
<p>在管理员界面,点击查询按钮,或进入FULL INTERFACE再作更详细的查询。</p>
<p>在我们查看XML输出文件之前,先看下URL和参数信息:</p>
<p><a href="http://localhost:8983/solr/select/?q=monitor&version=2.2&start=0&rows=10&indent=on">http://localhost:8983/solr/select/?q=monitor&version=2.2&start=0&rows=10&indent=on</a>.</p>
<p>然后浏览器中会显示输出的用XML标识的搜索结果,如下:</p>
<p><textarea cols="81" rows="24" name="code" class="xhtml"><?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">3</int><!--查询耗时(毫秒)Solr有一些缓存(保存过去的搜索结果),提高了搜索效率-->
<lst name="params"><!--查询的参数-->
<str name="indent">on</str><!--是否缩进XML文件-->
<str name="rows">10</str><!--返回的结果条数-->
<str name="start">0</str><!--搜索结果的开始位置-->
<str name="q">monitor</str>
<str name="version">2.2</str><!--版本信息-->
</lst>
</lst>
<!--numFound是找到几条,start从第几条开始显示-->
<!--这里并没有显示得分情况(非full interface),但结果其实已经按照得分排序了(Solr默认)-->
<!--如果是full interface查询,result会包括maxScore属性,标识最高得分-->
<result name="response" numFound="2" start="0">
<doc>
<!--如果是full interface查询,这里会有得分情况(默认)
<float name="score">0.5747526</float>
-->
<!--默认情况Solr会列出所有存储的fields
(不是所有field都需要存储,虽然可能根据它来查索引,但不用包含在就结果中)
-->
<!--
注意,某些field是多值的,由arr标签标记的
-->
<arr name="cat"><str>electronics</str><str>monitor</str></arr>
<arr name="features"><str>30" TFT active matrix LCD, 2560 x 1600,
.25mm dot pitch, 700:1 contrast</str></arr>
<str name="id">3007WFP</str>
<bool name="inStock">true</bool>
<str name="includes">USB cable</str>
<str name="manu">Dell, Inc.</str>
<str name="name">Dell Widescreen UltraSharp 3007WFP</str>
<int name="popularity">6</int>
<float name="price">2199.0</float>
<str name="sku">3007WFP</str>
<arr name="spell"><str>Dell Widescreen UltraSharp 3007WFP</str>
</arr>
<date name="timestamp">2008-08-09T03:56:41.487Z</date>
<float name="weight">401.6</float>
</doc>
<doc>
...
</doc>
</result>
</response>
</textarea></p>
<p></p>
<p>这只是一个简单的查询结果,可以加入例如高亮显示等查询条件,然后在result标记后会有更多信息。</p>
<p></p>
<p>十二、一些统计信息</p>
<p></p>
<p>进入<a href="http://localhost:8983/solr/admin/stats.jsp">http://localhost:8983/solr/admin/stats.jsp</a>。</p>
<p></p>
<p>在这里,当我们没有加载任何数据时,numDocs显示0,而现在显示19。</p>
<p>maxDocs的值取决于当你删除一个文档但却没有提交。</p>
<p></p>
<p>可以关注以下的一些handler:</p>
<p>/update,standard。</p>
<p></p>
<p>注意:这些统计信息都是实时的,不在磁盘上做保存。</p>
<p></p>
<p></p>
<p>十三、solrconfig.xml</p>
<p></p>
<p>这里包含很多我们可以研究的参数,现在先让我们看下<requestHandler>下定义的 request handers。</p>
<p></p>
<p><textarea cols="67" rows="12" name="code" class="xhtml"><requestHandler name="standard" class="solr.SearchHandler"
default="true">
<!-- default values for query parameters -->
<lst name="defaults">
<!--是否显示参数,none(都不显示),all(全显示,可以看到一些隐藏参数)-->
<str name="echoParams">explicit</str>
<!--
<int name="rows">10</int>
<str name="fl">*</str>
<str name="version">2.1</str>
-->
</lst>
</requestHandler></textarea></p>
<p></p>
<p>当我们通过POST通知Solr(如索引一个文档)或通过GET搜索,都会有个特定的request hander做处理。</p>
<p>这些handers可以通过URL来注册。之前我们加载文档时,Solr通过以下注册的handler做处理:</p>
<p><requestHandler name="/update" class="solr.XmlUpdateRequestHandler" /></p>
<p></p>
<p>而当使用搜索时,是使用solr.SearchHandler(上面的XML定义了)</p>
<p>通过URL参数或POST中的参数,都可以调用这些request handler</p>
<p>也可以在solrconfig.xml中通过default,appends,invariants来指定。</p>
<p>这里的一些参数等于是默认的,就像已经放在了URL后面的参数一样。</p>
<p></p>
<p></p>
<p>十四、一些重要的Solr资源</p>
<p></p>
<ul>
<li>Solr's Wiki:<a href="http://wiki.apache.org/solr/">http://wiki.apache.org/solr/</a> 有很多文档,以wiki的方式陈列。</li>
<li>mailling lists of Solr:<a href="http://www.lucidimagination.com/search/">http://www.lucidimagination.com/search/</a> 很多有价值的信息。(建议订阅Solr-users mailing list)</li>
<li>Solr's issue tracker:<a href="http://issues.apache.org/jira/browse/SOLR">http://issues.apache.org/jira/browse/SOLR</a>,安装JIRA。可以看到一些bug和能力增强信息。</li>
</ul>
<p>十五、查询参数</p>
<p></p>
<p><span><span>fl=*,score&q.op=</span><span class="op"><span style="color: #808080;">AND</span></span><span>&start=0&</span><span class="keyword"><strong><span style="color: #7f0055;">rows</span></strong></span><span>=16&hl=</span><span class="keyword"><strong><span style="color: #7f0055;">true</span></strong></span><span>&hl.fl=merHeading&hl.snippets=3&hl.simple.pre=<fontcolor=red>&hl.simple.post=</font>&facet=</span><span class="keyword"><strong><span style="color: #7f0055;">true</span></strong></span><span>&facet.field=merCategory&q=+(merHeading%3A%E4%BD%A0%E5%A5%BD+</span><span class="op"><span style="color: #808080;">AND</span></span><span>+merHeadingWithWord%3A%E6%BD%98)+merActualendTime:[1239264030468</span><span class="keyword"><strong><span style="color: #7f0055;">TO</span></strong></span><span>1240473630468]&sort=merActualendTime</span><span class="keyword"><strong><span style="color: #7f0055;">asc</span></strong></span><span></span></span></p>
<p></p>
<p><span><span>fl表示索引显示那些field(*表示所有field, score 是solr 的一个匹配热度) <br>q.op 表示q 中 查询语句的 各条件的逻辑操作 AND(与) OR(或) <br>start 开始返回条数 <br>rows 返回多少条 <br>hl 是否高亮 <br>hl.fl 高亮field <br>hl.snippets 不太清楚(反正是设置高亮3就可以了) <br>hl.simple.pre 高亮前面的格式 <br>hl.simple.post 高亮后面的格式 <br>facet 是否启动统计 <br>facet.field 统计field <br>q 查询语句(类似SQL) 相关详细的操作还需lucene 的query 语法 <br>sort 排序 <br></span></span></p>
<p></p>
<p>十六、删除索引</p>
<p></p>
<p><span class="string">post "<delete><id>42</id></delete>"</span><span></span></p>
相关推荐
**Elasticsearch 与 Solr 比较详解** 在大数据和搜索引擎领域,Elasticsearch (ES) 和 Apache Solr 都是广泛使用的开源技术,它们都基于 Lucene 库,提供高性能、可扩展的全文搜索和分析能力。然而,两者在设计哲学...
1. **Solr核心库**:Solr的核心功能由一系列JAR文件提供,如`solr-core.jar`,它包含了索引、查询、更新处理链、请求处理器等核心组件。 2. **Lucene库**:Solr构建在Lucene之上,因此`lib`目录中会包含Lucene的JAR...
Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一...
solr_3_2_0-server-8.11.2-1.el7.noarch
solr_3_2_0-doc-8.11.2-1.el7.noarch
Solr是Apache Lucene项目的一个子项目,是一个高性能、基于Java的全文检索服务器。它提供了分布式搜索、近实时索引、高可用性以及多种数据处理功能。本DEMO主要聚焦于Solr的配置和SolrJ的使用,帮助开发者更好地理解...
解压`solr-5.2.1.tgz`,复制`solr-5.2.1\example\example-DIH\solr`下的`solr`文件夹和`solr.xml`至`solr_home_1\home`目录。 3. 创建`solr_home_1`文件夹,在其内创建`home`和`server`子目录。 4. 将`solr-5.2.1...
1. **下载与解压**:首先,下载并解压 ikanalyzer-solr8.4.0 压缩包,获取包含 ikanalyzer 相关 jar 文件和配置文件的目录。 2. **添加依赖**:将解压后的 ikanalyzer 相关 jar 文件添加到 Solr 的 lib 目录下。这...
1. **安装ZooKeeper**:首先,我们需要部署一个稳定的ZooKeeper集群,通常至少需要三个节点,以确保高可用性。这里我们有zookeeper2181.zip,这意味着至少有一个ZooKeeper实例正在运行在端口2181上。 2. **配置Solr...
1. **下载和解压**:获取Solr 5.0和Tomcat 7的最新版本,并将它们解压缩到合适的目录。 2. **配置Tomcat**:启动Tomcat服务器,确保其正常运行。如果需要,配置Tomcat的server.xml文件以允许远程访问Solr。 3. **...
在《使用 Apache Solr 实现更加灵巧的搜索,第 1 部分 基本特性和 Solr 模式》文档中,你可能会学习到更多关于 Solr 的基础特性,如查询优化、分词器选择、查询分析过程以及如何利用 Solr 的模式设计来提升搜索体验...
1. **全文检索**:Solr的核心功能之一就是全文检索,它能够对输入的查询进行分析,找到相关度最高的文档。Solr支持多种语言的分词器,如英文的StandardAnalyzer和中文的SmartChineseAnalyzer,确保了跨语言的检索...
### Solr学习笔记_v1.1 - 高性能搜索引擎的核心参数与查询语法详解 #### 一、Query参数:深入理解Solr查询的核心要素 Solr作为高性能的全文搜索引擎,其强大的查询能力很大程度上依赖于一系列精细调整的参数。以下...
《Solr 1.4企业级搜索服务器》一书详细介绍了Apache Solr 1.4版本,这是一个开源的、高性能的、全功能的企业级搜索平台。本书由David Smiley和Eric Pugh共同编写,旨在帮助读者掌握如何利用Solr增强搜索体验,包括...
1. **索引**:索引是Solr处理数据的基础,它是对文档进行预处理后的结果,用于快速查询。Solr使用倒排索引技术,将文档中的每个词映射到包含该词的文档列表,大大提高了搜索速度。 2. **Core**:在Solr中,Core是一...
Apache Solr 是一个基于 Apache Lucene 的开源搜索引擎,为各种应用提供了搜索功能。它具有高效、可靠和强大的特点,广泛应用于企业级搜索、互联网搜索和数据分析。Solr 提供了包括全文搜索、高亮显示、自动拼写更正...
1. **动态词典加载**:Ik Analyzer支持动态加载和更新词典,方便维护和扩展。 2. **智能分词**:采用最大匹配算法和最少切分策略,既能处理常见词汇,又能处理复杂语境下的分词。 3. **自定义扩展**:允许用户添加...
Publication Date: April 5, 2014 | ISBN-10: 1617291021 | ISBN-13: 978-1617291029 | Edition: 1 Summary Solr in Action is a comprehensive guide to implementing scalable search using Apache Solr. This ...
Ambari+Bigtop 一站式编译和部署解决方案 https://gitee.com/tt-bigdata/ambari-env
solr_lxml_示例演示 solr 和 lxml 的 python 代码支持:Mac osx。 Python2.7 & python3.2 lxml 和 yaml 只为 Python2.7 & python3.2 编译示例可执行代码位于:/solr_lxml_Example/server/core 当任何应用程序启动时...