首頁 > 後端開發 > php教程 > 將Solarium與Solr一起搜索 - 高級

將Solarium與Solr一起搜索 - 高級

William Shakespeare
發布: 2025-02-21 10:20:13
原創
448 人瀏覽過

將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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板