Orchard Core提供了Lucene功能,允許您在網站上進行全文搜索。
大多數情況下,在運行博客或簡單的代理網站時,您可能需要在頁面內容中進行搜索。
在Orchard Core中,您可以使用Liquid配置,要在Content Type索引哪些文本或數據。
在進一步討論之前,請注意TheBlogTheme包含一個配方,該配方將在沒有任何必要知識的情況下默認為您配置所有這些內容。
讓我們看看我們如何一步一步地為您提供此服務。
第一步:在Orchard Core中啟用Lucene功能
正如你在這里看到的,我們在Orchard Core中有3個不同的Lucene特性。
您需要啟用“Lucene”功能才能創建Lucene索引。
第二步:創建Lucene索引
在Search下Index-->Lucene Indices菜單下,點擊按鈕Add Index。
顯示
讓我們來看看Lucene索引上有哪些可用選項:
索引名稱用於標識您的索引。
它將在/App_Data/Sites/{YourTenantName}/Lucene/{IndexName}中創建一個文件夾,該文件夾將包含Lucene在索引時創建的所有文件。
第二個選項是用於此索引的Analyzer名稱。
對於高級用戶來說,分析儀是一種更復雜的功能。
它允許您在索引文本時微調文本的詞干。
例如,當您搜索“CAR”時,當人們鍵入小寫的“car”時,您可能也希望得到結果。
在這種情況下,分析器可以使用小寫篩選器進行編程,該篩選器將對所有小寫文本進行索引。
有關分析器的更多詳細信息,請參閱Lucene.NET文檔。
默認情況下,Orchard Core中的Analyzer名稱只提供針對“English”區域性字符進行優化的標准Analyzer。
分析器是可擴展的,因此您可以通過使用Lucene.NET中提供的分析器之一或通過實現您自己的分析器來添加您自己的分析器。
可參看https://github.com/apache/lucenenet/tree/master/src/Lucene.Net.Analysis.Common/Analysis
例如,您可以使用以下示例通過依賴注入注冊自定義分析器,該示例來自自定義模塊中的Startup.cs文件:
using Microsoft.Extensions.DependencyInjection; using OrchardCore.Lucene.Model; using OrchardCore.Lucene.Services; using OrchardCore.Modules; namespace OrchardCore.Lucene.FrenchAnalyzer { [Feature("OrchardCore.Lucene.FrenchAnalyzer")] public class Startup : StartupBase { public override void ConfigureServices(IServiceCollection services) { services.Configure<LuceneOptions>(o => o.Analyzers.Add(new LuceneAnalyzer("frenchanalyzer", new MyAnalyzers.FrenchAnalyzer(LuceneSettings.DefaultVersion)))); } } }
第三個選擇是文化。
默認情況下,將選擇任何區域性。
這里,選擇是為了能夠定義該索引應該僅索引特定區域性的內容項或它們中的任何一個。
內容類型:您可以選擇應該由該索引解析的任何內容類型。
索引最新版本:此選項將允許您僅索引已發布的項目或索引草稿,如果您想要在自定義前端儀表板或甚至在管理后端自定義模塊中搜索內容項目,這可能會很有用。
默認情況下,如果我們不選中此選項,它將只索引已發布的內容項。
具體如下:
第三步:配置搜索設置
通過啟用Lucene模塊,我們還向/search添加了一個新的路由映射,這將需要一些設置才能正常工作。
創建新的Lucene索引后要做的第一件事是在Orchard Core中配置搜索設置。
在這里,我們可以定義網站上的/search頁面應該使用哪個索引,也可以定義這個搜索頁面應該使用哪些索引字段。
通常,我們默認使用Content.ContentItem.FullText。
第四步:設置索引權限
默認情況下,每個索引都是受權限保護的,因此如果您沒有設置哪些索引應該是公共的,則沒有人可以查詢它們。
要使您網站上的匿名用戶可以使用“BlogIndex”Lucene索引,您需要編輯此用戶角色並向其添加權限。
每個索引都將在OrchardCore.Lucene功能部分中列出。
給匿名用戶授權
接下來我們測試搜索頁是否成功
從文件夾可以看出已經建立了Lucene索引內容。
通過/search訪問搜索頁面。
點擊鏈接,可以看到使用了別名路由
搜索不存在的字符
在本例中,我使用了BlogTheme配方來自動配置所有內容。因此,上面的屏幕截圖是該主題的搜索頁面結果示例。
微調全文索引
在這里,我們可以看到Blog Post內容類型定義。
現在,我們為每種內容類型設置了一個部分,用於定義此內容項的哪一部分應作為全文的一部分進行索引。
默認情況下,內容項將索引“display text”和“body part”,但我們還為您添加了一個選項,讓您自定義要作為此全文索引字段的一部分進行索引的值。
通過單擊“使用自定義全文”,我們允許您設置任何流動腳本來執行此操作。
如示例所述,如果您還想通過副標題字段查找此內容項,則可以添加{{Model.Content.BlogPost.Subtitle.Text}}。
您可以使用Liquid字段執行許多操作:索引標識符、固定文本或數值等。
可選:索引模板自定義
此外,您還可以通過覆蓋這些文件,根據主題中的特定需要自定義這些模板:
/Views/Shared/Search.liquid or .cshtml
(general layout)/Views/Search-Form.liquid or .cshtml
(form layout)/Views/Search-Results.liquid or .cshtml
(results layout)
例如,您可以通過將“Summary”更改為“SearchSummary”並創建相應的形狀模板來簡單地自定義搜索結果模板以滿足您的需要。
SearchResults.liquid:
{% if Model.ContentItems != null and Model.ContentItems.size > 0 %} <ul class="list-group"> {% for item in Model.ContentItems %} <li class="list-group-item"> {{ item | shape_build_display: "SearchSummary" | shape_render }} </li> {% endfor %} </ul> {% elsif Model.Terms != null %} <p class="alert alert-warning">{{"There are no such results." | t }}</p> {% endif %}