1、Solr 1.4 企业搜索服务器1Solr 1.4企业搜索服务器文字搜索存在的时间比我们所能认知的时间更长。几乎所有系统,从网络客户端安装软件网站本身都存在搜索功能。然而在的好的搜索体验和平庸的搜索体验中有很大的区别,往往没有被注意到的区别。如果你想在你构建的应用程序上面脱颖而出,那就必须有伟大的搜索功能。如果你离开这一个数据库的功能,那么你想要得到一个很好的搜索体验是几乎不可能的事,因为这不符合用户所要求的一个好的搜索体验。有了 Solr,这个领先行业的开源搜索服务器,你会进入一个从高亮显示搜索结果到拼写检查层面的有特色的主机。数据远程或在 Solr的文件流即使应用程序将与 Solr 通过
2、HTTP 通信,它没有发送 Solr 数据在这个频道。Solr 支持所谓的远程流。而不是直接给 Solr 的数据,给出了一个 URL,它将解决。它可能是一个HTTP URL,但更可能是一个基于文件的 URL,适用的数据已经在 Solr 的机器。最后,在Solr 的 DataImportHandler,可以从数据库获取数据。数据格式以下是不同的数据格式:Solr-XML: Solr有特定的XML架构,它使用指定的文件和他们的领域。它支持删除文档的说明并进行优化和提交。Solr-binary: 类似于 Solr 的 XML,它是相同的结构的一个有效的二进制表示。这是唯一支持的 solrj 客户端
3、API。CSV: CSV 是一个字符分隔值格式(通常是一个逗号)。丰富的文件如 PDF,DOC,XLS,PPT Solr:文本数据中提取从这些格式是针对某一特定领域在 Solr 模式。 最后, Solr的DIH DataImportHandler contrib add-on是一个强大的功能,可以与数据库和XML数据源(例如:Web服务)。它支持可配置的关系和模式映射选项,如果需要的话,可以支持自定义转换。的帝唯一支持增量更新,如果源数据的修改日期。Solr 1.4 企业搜索服务器2我们使用XML,CSV格式,并将数据从数据库到Solr MusicBrainz展示Solr的能力但选项。最有可能
4、的是,一个应用程序只使用一种格式。在描述这些方法,我们将讨论卷曲和远程流,这是基本的主题。使用卷曲与Solr交互接收命令(可能相关的数据)通过HTTP POST。远程数据流 在上面的例子中,我们给出了Solr在HTTP消息的索引数据。另外,POST请求可以给Solr的指针在一个文件路径访问Solr或HTTP URL形式的数据。文件路径是由其机 Solr 服务器访问,而不是客户端,也必须具备必要的操作系统文件的权限。然而,正如之前,发起请求不到 Solr 完成了响应的回报。如果你发送一个大的 CSV 文件,然后使用远程流媒体应用。否则,如果文件是一个合适的大小或已经在一些已知的网址,那么你可能会
5、发现远程数据流更快和/或更方便,根据您的情况。这里是 Solr 访问本地文件的一个例子:curl http:/localhost:8983/solr/update -F stream.file=/tmp/artists.xml使用 URL 参数会改变 stream.url,我们会指定一个 URL。我们路过一名值参数(stream.file 和路径),而不是实际的数据。传XML 到 Solr Solr的原生XML语法很简单。你可以告诉Solr添加文件索引,提交变更、优化指标,并删除文件。下面是一个示例XML文件可以HTTP POST到Solr:5432a2007-12-31T09:40:00ZS
6、olr 1.4 企业搜索服务器35432a2007-12-31T09:40:00Zallowdups默认为FALSE,保证值的唯一性的领域,你有指定的模式中独特的领域(假设你有这样一个领域)。如果你要添加另一个具有相同价值的文档,那么这个文档将覆盖上一个文档,不管是提交的文档还是已经提交的文档。你不会得到一个错误。如果你确信你将添加一个不重复的文件,那么你可以设置allowdups真正获得的性能改进。 删除文档 您可以通过其独特的字段删除一个文档(我们在这里删除2个文档): artist:11604artist:11603或者,你可以删除所有的文件,一个特定的Lucene/Solr查询匹配(查
7、询语法不在本章中讨论):timestamp:* TO NOW-12HOUR在删除标签可以如果你想批很多缺失到一个消息,Solr是任意数量的ID和查询标签的内容。在本章中不讨论查询语法,但我会解释这有点复杂的查询。让我们假设你的所有文件,有一个时间戳字段值时,索引,和你有一个更新的策略,批量加载所有的日常数据。如果加载过程中的结果不应该是在索引中的文件,那么我们可以在大容量加载后立即删除它们。此查询将删除在过去12小时内没有索引的所有文档。十二是选择有些随意,但它需要小于24(更新过程间隔)和大于最长的时间它可能采取批量加载所有数据。 提交,优化和回滚 Solr 1.4 企业搜索服务器4发送给S
8、olr的数据不能立即搜索,也不缺失立即生效。像数据库一样,更改必须先提交。不同的数据库,有没有不同的会话(即事务)之间的每一个客户,反而有实际上是一个全局性的修改状态。这意味着,如果超过一个Solr客户端提交的修改和提交他们在相同的时间,为一位客户的设置将之前客户告诉Solr提交更改部分是可能的。通常,你会有一个过程负责更新发布。但如果没有,那么记住这一想法。 配置选项 设置配置选项,Solr的CSV能力通过HTTP发布相同的格式,名称-值对HTML表单post数据。如前所述,在技术上你可以使用一个URL通过HTTP GET流。url或流。文件参数。然而,这是一个糟糕的做法。还要注意,Solr
9、的CSV功能不支持index-time增加,但这是一个常见的需求。以下是每个配置选项的名称和一个解释。MusicBrainz跟踪CSV文件,我可以使用默认设置除了 指定如何解析值t_r_attributes字段和禁用唯一键处理性能。 separator: 在一行中分隔每一个值的字符。默认为,。 header: 设置为true如果第一行列出字段名称(默认)。 fieldnames: 如果第一行没有字段名称,然后你必须使用此相反指示它们是什么。他们是逗号分隔。如果没有指定名称列,则跳过它的数据。 skip: 字段没有导入CSV文件。 skipLines: 跳过的行数的输入文件。默认值为0。 tri
10、m: 如果这是真的,然后删除前导和尾随空白作为最后一步,即使引用用于显式地指定一个空间。默认值为false。Solr已经初步通过修剪,但引用可能留下空间。 encapsulator: 这个角色是用来封装(环绕,行情)值为了保存字段分隔符作为字段值,而不是错误地解析下一个字段。这个角色本身是翻它逃跑了。它默认为双引号,除非指定逃脱。例如:11604, foo, “The “second“ word is quoted.“, bar. escape: 如果找到这个字符输入文本,然后下一个字符是字面意思的转义字符,它不是另有特别处理的文件的语法。例子:11604, foo, The second,
11、word is followed by a comma., bar. keepEmpty: 空白的(零长度)字段是否应该指定索引或者忽略。默认值为false。Solr 1.4 企业搜索服务器5 overwrite: 它表明是否执行模式的唯一键约束overwritting现有文档使用相同的ID。默认值为true。禁用这个提高性能,如果你确定你是通过新文档。 split: 这是一个领域的选择用于 通常会是什么一个值分割成多个值。另一组CSV配置选项(分离器、等等)可以为这个字段指定指导Solr有关如何做到这一点。看到前面的追踪MusicBrainz例子这是如何使用的。 map: 这是另一个用来输入
12、值替换为另一个领域的选项。它也可以用来删除值。分离的价值应该包括一个冒号左边右边所取代。如果我们使用这个特性的跟踪MusicBrainz数据,那么它可以用来t_r_attributes中的数字代码映射到更有意义的值。这里有一个例子:-F keepEmpty=false -F f.t_r_attributes.map=0:-F f.t_r_attributes.map=1:Album -F f.t_r_attributes.map=2:Single.开始使用DIH Solr DIH不是一个直接的一部分。因此它可能不会包含在Solr设置。它相当于一个JAR文件名为apache-solr-datai
13、mporthandler - 1.4.jar,可能已经嵌入到solr.war文件。您可以使用jar - tf solr.war。或者,它可能是放置在 / 自由,这是与conf目录我们一直使用。数据库连接,我们需要确保JDBC驱动程序是在Java类路径中。把它放在 / lib是一种方便的方法。与Solr DIH需要注册。这是它是如何实现的:mb-dih-artists-jdbc.xmlmb-dih-artists-jdbc.xml(简称MusicBrainz mb)在 / conf文件,用于配置DIH。可以指定一些配置方面在这个请求处理程序配置,而不是专用的配置文件。但是,我建议它DIH配置文件
14、中,在我们的例子。下面是一个mb-dih-artists-jdbc.xml文件一个SQL查询:Solr 1.4 企业搜索服务器6Solr 1.4 企业搜索服务器7DIH字段和转型在是元素声明如何查询中的列映射到Solr。字段相匹配的元素必须有一个列属性中相应的指定列的SQL查询语句。name属性是Solr模式列是进入的字段名。如果没有指定(它永远在我们的示例中),那么默认为列名。使用SQL关键字如我们使用相同的名称作为Solr模式而不是数据库模式。这减少了所需的显式映射数量在元素和缩短现有的。当一个列在结果可以直接放置到Solr没有进一步的处理,不需要指定字段声明,因为它是隐含的。一个属性的实
15、体声明我们还没有提到是转换器。这个声明一个以逗号分隔的转换器从JDBC resultset操纵数据传输到一个Solr字段。这些变压器评估一个字段,如果它有一个属性用于做它的工作。不止一个可能使用给定的字段。因此,转换器声明的顺序很重要。下面是我们使用的属性: template: TemplateTransformer和声明使用的文本,其中可能包括变量名替换使用$ 名称语法。访问现有的字段,使用entityname。columnname语法。 splitBy: RegexTransformer和分割使用的单个字符串值到一个多值通过寻找指定的字符。Solr 1.4 企业搜索服务器8 dateTimeFormat: 它是由 DateFormatTransformer使用. 这是一个Java日期/时间格式模式(http:/ .api/java/text/SimpleDateFormat.html). 如果字段的类型模式是一个日期,它是必要的,以确保Solr可以理解的格式。另外,确保字符串匹配的iso - 8601格式,它看起来像这样:1976 - 10 - 23 - t23:59:59.000z。Solr在所有情况下,当指定日期你可以使用其所谓的“DateMath”语法(在下一章描述)等附加/天告诉Solr轮一天的日期。1