这是有关使用Apache的Solr搜索实现以及Solarium(PHP库)将其集成到您的应用程序中的第四个也是最后一部分 在前三个部分中,我们安装并配置了Solr和Solarium,并开始构建搜索电影的示例应用程序。我们还研究了刻面搜索。
>我们将通过查看Solr的一些更高级功能以及如何与Solarium一起使用。
钥匙要点通过标记文档中匹配的单词或短语,提供完整的和摘要的突出显示选项。
,或者您甚至可以使用每场设置:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
>在搜索实现中配置了突出显示组件后,在搜索结果视图中显示它还有更多的工作。
首先,您需要从ID中提取突出显示组件的突出显示文档:$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');
现在,您可以通过迭代通过它们来访问所有突出显示的字段,作为突出显示文档的属性:
$hl = $query->getHighlighting(); $hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>'); $hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');或,您可以使用getfield():
>
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
突出显示的字段不仅返回文本,但是,它们会返回文本“摘要”数组。 如果该特定字段没有匹配项 - 例如,如果您的搜索在标题上匹配而不是概述 - 那个数组将为空。
>上面的代码将返回最多一个片段。 要更改此行为,您可以使用setSnippets()方法:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');>
>不容错过的电影剧院活动将是电视历史上最令人难忘的时刻之一,以及关于两全其美的独家剪辑,以及《星际迷航:下一代》第3季。设定于24世纪,下一代是由Gene Roddenberry创建的,在原始《星际迷航》系列之后20年。下一代成为《星际迷航》系列最长的系列赛,由7个赛季中的178集组成。 《星际迷航:下一代》 - 两全其美的人是第一个看到两全其美的机会,这是有史以来最伟大的电视节目之一,作为全国精选电影剧院的光荣重新制作的全长功能。 >
历史和独家剪辑,介绍了两全其美的世界和星际迷航:下一代突出显示的文档的摘要数组将包含三个项目:
>
> 在原始《星际迷航》系列之后。下一代成为Star
的最长跑步系列 Trek特许经营>
$hl = $query->getHighlighting(); $hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>'); $hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');>您可以使用许多其他参数来修改突出显示组件的行为。
>将突出显示到我们的电影搜索
>现在我们已经介绍了如何使用突出显示,将其集成到我们的电影搜索应用程序中应该很简单。然后,您会记住的搜索结果在App/views/home/index.blade.php中 ->
首先要做的就是通过在运行搜索之前添加以下内容来修改应用程序/controllers/homecontroller.php
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
请注意,每个搜索结果基本上如何混合并匹配搜索结果文档和突出显示的文档之间的字段 - 后者实际上是前者的一个子集。根据您的模式,您可能在突出显示的版本中提供所有字段。
>
要设置建议,我们需要在您的solrconfig.xml文件中进行配置。 打开它,将以下XML的以下片段放置在另一个>
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');>您会注意到一些对“拼写检查”的引用,但这仅仅是因为建议组件在内部重复了大部分功能。
重要的一点是
>
>重新启动solr,您现在可以尝试通过网络浏览器运行建议查询:
$hl = $query->getHighlighting(); $hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>'); $hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');(根据您的设置方式,您可能需要更改端口号)
)
输出应该看起来有点像这样:如您所见,Solr返回了“ HO”的四个可能的匹配,
$highlightedDoc = $highlighting->getResult($document->id);*ho **使用,** ho **用途,** ho ** rror and ** ho ** me。 尽管 *home
>和恐怖在字母中 house> house,但 house> house>首先出现在我们的索引中最常见的搜索词之一。 。
>让我们使用此组件为我们的搜索框创建一个自动完成,这将在用户键入其查询时建议常见的搜索术语。
首先,定义路线:
if($highlightedDoc){ foreach($highlightedDoc as $field => $highlight) { echo implode(' (...) ', $highlight) . '<br/>'; } }
在您的布局中包含jQuery UI(和jQuery本身):
if($highlightedDoc){ $highlightedTitle = $highlightedDoc->getField('title'); }包括一个jQuery UI主题:
$hl = $query->getHighlighting(); $hl->setSnippets(5); // . . . as before . . .>最后,添加一些JS来初始化自动完整:
这就是全部 - 通过运行一些搜索来尝试一下。
implode(' ... ', $highlightedDoc->getField('synopsis'))> 基于数组的配置
>
如果您愿意,可以使用数组来设置查询 - 例如:
在启动时,Solr穿越指定的主目录寻找内核,当它找到一个称为core.propeties的文件时,它标识了核心。 到目前为止,我们已经使用了一个名为Collection1的核心,您会发现它包含三个关键项目:
// Get highlighting component, and apply settings $hl = $query->getHighlighting(); $hl->setSnippets(5); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>'); // Execute the query and return the result $resultset = $this->client->select($query);>
数据目录保存索引。 该目录的位置可以被覆盖,如果不存在,它将为您创建。
so,创建一个新实例遵循以下步骤:
…instanceName是您的新目录的名称。
>
>请注意,示例中发货目录中的schema.xml配置包含对许多文本文件的引用 - 例如stopwords.txt,protwords.txt等 - 您可能还需要复制。>
然后重新启动solr。>您还可以通过Web浏览器中的管理Web界面添加新核心 - 单击左侧的Core Admin,然后添加Core。
其他配置
propwords.txt文件 - 或更具体地说,诸如lang/stopwords_en.txt之类的语言特定文件 - 包含搜索索引器应忽略的单词,例如“ a”,“ the”和“ at” 。 在大多数情况下,您可能不需要修改此文件。
>根据您的应用程序,您可能会发现您需要在protwords.txt中添加单词。 该文件包含一个没有“茎”的受保护单词的列表,也就是说,将其简化为基本形式;例如,“问”变成“问”,“工作”变为“工作”。 有时,试图“纠正”单词,也许会删除其认为最后是错误的数字字母。 您可能正在与地理区域打交道,并发现“缅因州”被驱动到“缅因州”。
>您可以在同义词中指定同义词 - 具有相同含义的单词。 每条逗号单独的同义词。 例如:
>您也可以使用Synoyms.txt来帮助使用同义词映射来纠正常见的拼写错误,例如:
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<strong>'); $hl->setSimplePostfix('</strong>');
如果您使用的是货币字段,则可能希望更新并关注Currency.xml(指定了一些示例汇率) - 当然哪个是高度波动的。
$hl = $query->getHighlighting(); $hl->setFields(array('title', 'synopsis')); $hl->setSimplePrefix('<span style="background:yellow;">'); $hl->setSimplePostfix('</span>');在本系列中,我们研究了Apache的Solr实施搜索,并使用PHP Solarium库与它进行交互。我们已经安装和配置了Solr以及一个示例模式,并构建了一个旨在搜索一组电影的应用程序,该应用程序展示了Solr的许多功能。我们研究了刻面搜索,突出显示结果和分裂组件。希望这将为您提供足够的基础,以使其适应其在您的应用程序中使用Solr进行搜索。
要进一步阅读,您可能希望将Solr参考指南作为PDF下载,或咨询Solarium文档。
>常见问题(常见问题解答)关于将Solarium与Solr一起进行高级搜索>
> Solarium和Stellarium之间有什么区别?不同的软件。 Solarium是一个PHP库,提供了用于与功能强大的搜索平台Solr交互的API。另一方面,Stellarium是您计算机的免费开源天文馆。它在3D中显示出逼真的天空,就像您在肉眼,双筒望远镜或望远镜的情况下看到的一样。>如何使用Solarium添加文档?
>如何使用Solarium从Solr删除文档?首先需要使用SOLR服务器的配置创建客户端实例。然后,您可以使用客户端的CreateUpdate函数创建更新查询。您可以使用AddDeleteById或AddDeleteByQuery函数将删除命令添加到此查询中。一旦将所有删除命令添加到查询中,您就可以使用客户端的执行函数执行它。
>来优化SOLR索引,以使用Solarium优化Solr索引,首先需要使用Solr Server的配置来创建客户端实例。然后,您可以使用客户端的CreateUpdate函数创建更新查询。您可以使用AddOptimize函数将优化命令添加到此查询中。一旦将优化命令添加到查询中,您就可以使用客户端的执行函数执行它。
>>如何使用Solarium和Solr?
如何使用Solarium和Solr使用突出显示? 🎜>要使用Solarium和Solr突出显示,首先需要使用客户端的CreateSelect函数创建选择查询。然后,您可以使用AddHighlighting功能将荧光笔添加到查询中。您可以在荧光笔上设置各种参数,例如要突出显示的字段和要返回的片段数量。设置荧光笔后,您可以使用客户端的执行函数执行查询,该函数将返回一个包括突出显示结果的结果集。
以上是将Solarium与Solr一起搜索 - 高级的详细内容。更多信息请关注PHP中文网其他相关文章!