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

将Solarium与Solr一起搜索 - 实施

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原创
2025-02-21 10:56:10462浏览

Using Solarium with SOLR for Search - Implementation

这是四部分系列中的第三部分,该系列演示了Solarium与Apache Solr进行搜索实施的集成。 第一部分涵盖了核心概念和设置,而第二部分则详细介绍了Solarium的安装和配置作为SOLR的PHP接口。 本文着重于构建搜索功能本身。

>

密钥概念:

>本教程涵盖了使用Solarium客户端在Laravel构建基本搜索的基本搜索。 我们将使用DIMAX探索增强的搜索,实施方面搜索精制结果,管理动态字段和分页,并实施过滤以改进用户交互。

基本搜索实现:

可以实现一个简单的搜索,如下所示:

<code class="language-php">$query = $client->createSelect();
$query->setQuery('%P1%', [Input::get('q')]); // Using a placeholder for secure input</code>

Input::get('q')>从laravel get或post variable(命名为'q')中检索搜索查询。 占位符%P1%逃脱了搜索短语。

执行搜索:

<code class="language-php">$resultset = $client->select($query);</code>

检索结果的数量:

<code class="language-php">printf('Your search yielded %d results:', $resultset->getNumFound());</code>

>通过结果迭代:

<code class="language-php">foreach ($resultset as $document) {
    // Access fields as public properties (e.g., $document->title) or iterate:
    foreach ($document as $field => $value) {
        if (is_array($value)) $value = implode(', ', $value); // Handle multi-value fields
        print '<strong>' . $field . '</strong>: ' . $value . '<br>';
    }
}</code>

集成到laravel应用程序中:

>

为了获得get请求,家庭控制器中的getIndex方法可能是:>

<code class="language-php">public function getIndex()
{
    if (Input::has('q')) {
        $query = $this->client->createSelect();
        $query->setQuery('%P1%', [Input::get('q')]);
        $resultset = $this->client->select($query);
        return View::make('home.index', ['q' => Input::get('q'), 'resultset' => $resultset]);
    }
    return View::make('home.index');
}</code>
相应的视图(

)将显示结果: app/views/home/index.blade.php 通过DIMAX增强搜索:

<code class="language-blade">@if (isset($resultset))
<p>Your search yielded <strong>{{ $resultset->getNumFound() }}</strong> results:</p>
@foreach ($resultset as $document)
    <h3>{{ $document->title }}</h3>
    <dl>
        <dt>Year</dt>
<dd>{{ $document->year }}</dd>
        @if (is_array($document->cast))
            <dt>Cast</dt>
<dd>{{ implode(', ', $document->cast) }}</dd>
        @endif
    </dl>
    {{ $document->synopsis }}
@endforeach
@endif</code>
>跨多个字段搜索(例如,'title','cast','supopsis'),使用DEMAX:

这将“标题”字段中的匹配项优先。

>

>指定返回的字段:
<code class="language-php">$dismax = $query->getDisMax();
$dismax->setQueryFields('title^3 cast^2 synopsis^1'); // Assign weights</code>

控制哪些字段使用以下方式返回:

排序结果:

>使用:
<code class="language-php">$query->clearFields()->addFields(['title', 'cast']); // Or $query->addFields('*') for all</code>
进行排序结果

分页:

使用
<code class="language-php">$query->addSort('title', 'asc'); // Ascending order by title</code>

>。 faceTed搜索:

facets允许用户过滤结果。 要在“评分”字段上创建一个方面:$query->setStart(0); $query->setRows(20);

>显示面计数:

范围的方面(例如,十年来):

>

<code class="language-php">$facetSet = $query->getFacetSet();
$facetSet->createFacetField('rating')->setField('rating');</code>
用刻面过滤:

>基于刻面选择的添加过滤:
<code class="language-php">$facet = $resultset->getFacetSet()->getFacet('rating');
foreach ($facet as $value => $count) {
    echo $value . ' [' . $count . ']<br>';
}</code>

应更新视图以包括基于这些方面过滤的链接。 这需要使用
<code class="language-php">$facet = $facetSet->createFacetRange('years')
    ->setField('year')
    ->setStart(1900)
    ->setGap(10)
    ->setEnd(2020);</code>
使用适当的查询参数生成URL。 (省略了简洁的详细视图代码,但遵循原始文本中概述的原则)。

> >这种增强的解释提供了在Laravel应用程序中对日光浴室和Solr集成的更具结构化和详细的演练。 请记住将代码调整到您的特定数据模型和应用程序结构中。>

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

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