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 %}