首页 >后端开发 >php教程 >将Solarium与Solr一起搜索 - 高级

将Solarium与Solr一起搜索 - 高级

William Shakespeare
William Shakespeare原创
2025-02-21 10:20:13439浏览

将Solarium与Solr一起搜索 - 高级

这是有关使用Apache的Solr搜索实现以及Solarium(PHP库)将其集成到您的应用程序中的第四个也是最后一部分 在前三个部分中,我们安装并配置了Solr和Solarium,并开始构建搜索电影的示例应用程序。我们还研究了刻面搜索。

>我们将通过查看Solr的一些更高级功能以及如何与Solarium一起使用。

钥匙要点

通过标记文档中匹配的单词或短语,提供完整的和摘要的突出显示选项。

>使用Solr的建议组件将自动完整功能集成到您的搜索应用程序中,该功能分析了索引字段以进行模式匹配以动态建议查询术语。

>使用基于数组的配置来设置日光浴中的查询,允许详细自定义搜索参数和结果处理。
  • >通过添加其他内核来扩展Solr的功能,该功能涉及创建特定目录和配置文件以有效处理不同的数据集或搜索条件。
  • >
  • >使用其他配置文件(例如同义词)和potwords.txt进行自定义SOLR行为,以微调搜索引擎对查询语言的理解和处理,提高搜索相关性和准确性。
  • >
  • > Solr
  • 突出显示结果
  • >突出显示组件使您可以突出显示与搜索相匹配的文档部分。 它周围显示的行为取决于字段 - 如果是标题机会,它将以匹配的单词和更长的字段(例如概要或文章的主体)完整地显示出来,它将突出显示单词但是使用片段;就像Google的搜索结果一样。
  • >要设置突出显示,您首先需要指定要包含的字段。 然后,您可以为突出显示的单词或短语设置一个前缀和相应的后缀。 因此,例如,使突出显示的单词和短语粗体:
>

另外,要添加背景颜色:

,或者您甚至可以使用每场设置:

$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特许经营,由178集在7个季节中组成。星际迷航:下一代 - 最好的
    >
  • 显示多个片段的一种方法是爆裂它们,例如:>
  • 这将导致以下结果:
历史和独家剪辑,介绍了两全其美的最佳和《星际迷航:下一代》……之后的《星际迷航》系列之后。下一代成为《明星》中最长的系列赛……跋涉特许经营,由7个赛季中的178集组成。星际迷航:下一代 - 最好的

>

$hl = $query->getHighlighting();
$hl->getField('title')->setSimplePrefix('<strong>')->setSimplePostfix('</strong>');
$hl->getField('synopsis')->setSimplePrefix('<span style="background:yellow;">')->setSimplePostfix('</span>');
>您可以使用许多其他参数来修改突出显示组件的行为。

>将突出显示到我们的电影搜索

>现在我们已经介绍了如何使用突出显示,将其集成到我们的电影搜索应用程序中应该很简单。

>

首先要做的就是通过在运行搜索之前添加以下内容来修改应用程序/controllers/homecontroller.php
然后,您会记住的搜索结果在App/views/home/index.blade.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的核心,您会发现它包含三个关键项目:>

core.propertes文件。 从最基本的角度来看,它只包含实例的名称。
// 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);
>

conf Directory包含实例的配置文件。 至少,此目录必须包含一个schema.xml和solrconfig.xml文件。

>

数据目录保存索引。 该目录的位置可以被覆盖,如果不存在,它将为您创建。

so,创建一个新实例遵循以下步骤:

    >在您的主目录中创建一个新目录 - 示例应用程序中的电影
  1. >
  2. 创建一个conf Directory
  3. >在conf目录中创建或复制schema.xml文件和solrconfig.xml文件,并相应地自定义
  4. >
  5. >创建一个称为core.properties的文本文件,其中包括以下内容:
> name = instanceName

…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一起进行高级搜索

>如何与Solr和Solarium和Solarium?

>实现与SOLR和SOLARIUM实现自动完成的启用,涉及在Solr配置文件中创建建议者。该建议将用于提供用户查询的建议。设置建议后,您可以使用Solarium的建议查询来获取建议。 Suggester查询将根据用户的输入返回建议列表,然后您可以向用户显示。

>

> Solarium和Stellarium之间有什么区别?不同的软件。 Solarium是一个PHP库,提供了用于与功能强大的搜索平台Solr交互的API。另一方面,Stellarium是您计算机的免费开源天文馆。它在3D中显示出逼真的天空,就像您在肉眼,双筒望远镜或望远镜的情况下看到的一样。

>

>我如何使用Solarium查询Solr? ,您首先需要使用Solr Server的配置创建客户端实例。然后,您可以使用客户端的CreateSelect函数创建选择查询。您可以在查询上设置各种参数,例如要返回的字段,查询字符串和任何过滤器。设置查询后,您可以使用客户端的执行函数执行该查询,该功能将返回一个可以迭代的结果集以访问单个文档。

>如何使用Solarium添加文档?

>要使用Solarium将文档添加到Solr,首先需要使用Solr Server的配置来创建客户端实例。然后,您可以使用客户端的CreateUpdate函数创建更新查询。您可以使用AddDocument函数将文档添加到此查询中,该函数将文档实例作为其参数。文档实例应具有要添加到文档的所有字段和值。一旦将所有文档添加到查询中,您就可以使用客户端的执行函数执行它。

>

>如何使用Solarium从Solr删除文档?首先需要使用SOLR服务器的配置创建客户端实例。然后,您可以使用客户端的CreateUpdate函数创建更新查询。您可以使用AddDeleteById或AddDeleteByQuery函数将删除命令添加到此查询中。一旦将所有删除命令添加到查询中,您就可以使用客户端的执行函数执行它。

>

>如何使用Solarium?

来优化SOLR索引,以使用Solarium优化Solr索引,首先需要使用Solr Server的配置来创建客户端实例。然后,您可以使用客户端的CreateUpdate函数创建更新查询。您可以使用AddOptimize函数将优化命令添加到此查询中。一旦将优化命令添加到查询中,您就可以使用客户端的执行函数执行它。

>

>在将Solarium与SOLR使用Solrium时如何处理错误?可以通过捕获客户的执行函数抛出的Solarium_Exception来处理。此例外将包含有关错误的信息,例如错误消息和SOLR响应。

>如何使用Solarium和Solr?

>

首先需要使用客户端的CreateSelect函数创建选择查询。然后,您可以使用AddFacetset函数将facet设置添加到查询中。您可以在各个方面添加各种各样的刻面,例如野外面,查询面和范围。设置了方面后,您可以使用客户端的执行函数执行查询,该函数将返回包含facet结果的结果集。

如何使用Solarium和Solr使用突出显示? 🎜>要使用Solarium和Solr突出显示,首先需要使用客户端的CreateSelect函数创建选择查询。然后,您可以使用AddHighlighting功能将荧光笔添加到查询中。您可以在荧光笔上设置各种参数,例如要突出显示的字段和要返回的片段数量。设置荧光笔后,您可以使用客户端的执行函数执行查询,该函数将返回一个包括突出显示结果的结果集。

如何使用Solarium和Solr? 🎜>要与Solarium和Solr一起使用分页,首先需要使用客户端的CreateSelect函数创建选择查询。然后,您可以在查询上设置“开始”参数和行参数,以指定要返回的结果范围。启动参数指定要返回的第一个结果的索引,而行参数指定要返回的结果数。分页设置后,您可以使用客户端的执行函数执行查询,该功能将返回包含指定结果范围的结果集。

以上是将Solarium与Solr一起搜索 - 高级的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn