目录
conf Directory包含实例的配置文件。 至少,此目录必须包含一个schema.xml和solrconfig.xml文件。
还有一些其他配置文件值得一提。
>
>要使用Solarium将文档添加到Solr,首先需要使用Solr Server的配置来创建客户端实例。然后,您可以使用客户端的CreateUpdate函数创建更新查询。您可以使用AddDocument函数将文档添加到此查询中,该函数将文档实例作为其参数。文档实例应具有要添加到文档的所有字段和值。一旦将所有文档添加到查询中,您就可以使用客户端的执行函数执行它。
>如何使用Solarium?
>在将Solarium与SOLR使用Solrium时如何处理错误?可以通过捕获客户的执行函数抛出的Solarium_Exception来处理。此例外将包含有关错误的信息,例如错误消息和SOLR响应。
首先需要使用客户端的CreateSelect函数创建选择查询。然后,您可以使用AddFacetset函数将facet设置添加到查询中。您可以在各个方面添加各种各样的刻面,例如野外面,查询面和范围。设置了方面后,您可以使用客户端的执行函数执行查询,该函数将返回包含facet结果的结果集。
如何使用Solarium和Solr? 🎜>要与Solarium和Solr一起使用分页,首先需要使用客户端的CreateSelect函数创建选择查询。然后,您可以在查询上设置“开始”参数和行参数,以指定要返回的结果范围。启动参数指定要返回的第一个结果的索引,而行参数指定要返回的结果数。分页设置后,您可以使用客户端的执行函数执行查询,该功能将返回包含指定结果范围的结果集。
首页 后端开发 php教程 将Solarium与Solr一起搜索 - 高级

将Solarium与Solr一起搜索 - 高级

Feb 21, 2025 am 10:20 AM

将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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1653
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1251
29
C# 教程
1224
24
在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

什么是REST API设计原理? 什么是REST API设计原理? Apr 04, 2025 am 12:01 AM

RESTAPI设计原则包括资源定义、URI设计、HTTP方法使用、状态码使用、版本控制和HATEOAS。1.资源应使用名词表示并保持层次结构。2.HTTP方法应符合其语义,如GET用于获取资源。3.状态码应正确使用,如404表示资源不存在。4.版本控制可通过URI或头部实现。5.HATEOAS通过响应中的链接引导客户端操作。

您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? 您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? Apr 05, 2025 am 12:03 AM

在PHP中,异常处理通过try,catch,finally,和throw关键字实现。1)try块包围可能抛出异常的代码;2)catch块处理异常;3)finally块确保代码始终执行;4)throw用于手动抛出异常。这些机制帮助提升代码的健壮性和可维护性。

PHP中的匿名类是什么?您何时可以使用它们? PHP中的匿名类是什么?您何时可以使用它们? Apr 04, 2025 am 12:02 AM

匿名类在PHP中的主要作用是创建一次性使用的对象。1.匿名类允许在代码中直接定义没有名字的类,适用于临时需求。2.它们可以继承类或实现接口,增加灵活性。3.使用时需注意性能和代码可读性,避免重复定义相同的匿名类。

包括,require,incement_once,require_once之间有什么区别? 包括,require,incement_once,require_once之间有什么区别? Apr 05, 2025 am 12:07 AM

在PHP中,include,require,include_once,require_once的区别在于:1)include产生警告并继续执行,2)require产生致命错误并停止执行,3)include_once和require_once防止重复包含。这些函数的选择取决于文件的重要性和是否需要防止重复包含,合理使用可以提高代码的可读性和可维护性。

说明PHP中的不同错误类型(注意,警告,致命错误,解析错误)。 说明PHP中的不同错误类型(注意,警告,致命错误,解析错误)。 Apr 08, 2025 am 12:03 AM

PHP中有四种主要错误类型:1.Notice:最轻微,不会中断程序,如访问未定义变量;2.Warning:比Notice严重,不会终止程序,如包含不存在文件;3.FatalError:最严重,会终止程序,如调用不存在函数;4.ParseError:语法错误,会阻止程序执行,如忘记添加结束标签。

PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

See all articles