這是有關使用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>');
>
$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);
>和恐怖在字母中 house> house,但 house> house>首先出現在我們的索引中最常見的搜索詞之一。 。
>讓我們使用此組件為我們的搜索框創建一個自動完成,這將在用戶鍵入其查詢時建議常見的搜索術語。
首先,定義路線:
if($highlightedDoc){ foreach($highlightedDoc as $field => $highlight) { echo implode(' (...) ', $highlight) . '<br/>'; } }
在您的佈局中包含jQuery UI(和jQuery本身):
if($highlightedDoc){ $highlightedTitle = $highlightedDoc->getField('title'); }
$hl = $query->getHighlighting(); $hl->setSnippets(5); // . . . as before . . .
這就是全部 - 通過運行一些搜索來嘗試一下。
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>');
要進一步閱讀,您可能希望將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中文網其他相關文章!