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

如何实现Orchard Core CMS的全文索引的更多相关文章

  1. 初试Orchard Core CMS

    关于Orchard Core CMS,这是一套内容管理系统(Content Management System),看一下来自官方文档的解释,什么是Orchard CMS. Orchard is a f ...

  2. 创建一个新的解耦的Orchard Core CMS网站

    引言本文将介绍创建一个功能齐全.解耦的CMS网站的过程,该网站允许您编辑博客帖子并呈现它们.解耦是一种开发模型,其中站点的前端和后端(管理)托管在同一个Web应用程序中,但只有后端由CMS驱动.然后, ...

  3. 创建一个Orchard Core CMS 应用程序

    开始使用Orchard Core作为NuGet软件包 在本文中,我们将看到使用Orchard Core提供的NuGet包创建CMS Web应用程序是多么容易. 你可以在这里找到Chris Payne写 ...

  4. 创建一个 Orchard Core CMS 站点

    本文通过引用项目模板的方式创建Orchard CMS站点. 创建项目有不同的方式可以为Orchard Core创建站点和模块.你可以在这里了解更多关于它们的信息.在本指南中,我们将使用我们的" ...

  5. Orchard Core创建CMS/Blog站点

    安装.NET Core SDK 下载并安装当前最新版本.NET Core SDK 3.1: https://dotnet.microsoft.com/download 安装visual studio ...

  6. Orchard Core学习一

    Orchard Core学习一 Orchard Core是ASP.NET Core上Orchard CMS的重新开发. Orchard Core由两个不同的目标组成: Orchard核心框架:用于在A ...

  7. Orchard Core 文档翻译 (二)代码生成模板 Code Generation Templates

    Code Generation Templates 翻译原文:https://www.cnblogs.com/Qbit/p/9746457.html转载请注明出处 Orchard Core Templ ...

  8. Orchard Core 中文文档翻译(一)关于Orchard Core

    原文连接:https://www.cnblogs.com/Qbit/p/9746363.html 转载请注明出处 翻译说明:本系列为直译,按照官方的计划现在这个版本(2018年10月5日)已经接近最终 ...

  9. Orchard Core 简介

    Orchard Core 是基于ASP.NET Core 对Orchard CMS的 二次开发. Orchard Core由两部分组成: Orchard Core Framework: 一个基于ASP ...

随机推荐

  1. SSRF详解

    上一篇说了XSS的防御与绕过的思路,这次来谈一下SSRF的防御,绕过,利用及危害 0x01 前置知识梳理 前置知识涉及理解此漏洞的方方面面,所以这部分要说的内容比较多 SSRF(Server-Side ...

  2. SQL 练习25

    查询同名学生名单,并统计同名人数 SELECT sname,COUNT(sname) 同名人数 from Student GROUP BY sname HAVING COUNT(sname)>1

  3. 题解 Merchant

    传送门 可以发现如果我们最终选择的物品集合已经确定,就很好求了 \(\sum k*t+\sum b \geqslant s\) ,二分即可 但现在我们无法确定该选哪些物品 因此我们只需要check一下 ...

  4. WPF 实现完全可控制的漂亮自定义窗口

    在WPF界面开发中,有时候不想用系统的死板的窗口,想要来点新花样,常会自定义窗口. 那么,先抛出问题,想搞出下面这样的窗口,该咋整 ? aa  下面看一个啥也没设置过的普通窗口,这样的窗口,我们只能控 ...

  5. WPF 中TextBox 增加输入检测,错误提示

    先来总结下实现错误提示功能的几个要点 1:binding 的ValidationRules 2 :Validation.ErrorTemplate 首先我们在界面添加一个TextBox, Text绑定 ...

  6. uwp 之多媒体开发

    xml code ----------------------------------------------------- <Page x:Class="MyApp.MainPage ...

  7. Mysql 修改本地密码

    第一步 update user set authentication_string=password('root') where user='root' and host='localhost'; 第 ...

  8. 服务器程序动态加载自定义jar包的过程

    需求: 用过hive的都知道,可以自定义hive的一个udf jar,然后将这个jar add到hive服务端,就会加载这个jar实现用户自定义逻辑.现在的需求就是实现这么一个服务端所做的事情! 场景 ...

  9. JMeter结果树响应数据中文乱码

    打开apache-jmeter-2.11\bin\jmeter.properties文件,搜索"encoding"关键字,找到如下配置: # The encoding to be ...

  10. 关于在mysql和oracle中编码对varchar等类型的影响

    今天在测试oracle的时候发现,我用varchar2(10),的字段,居然存不下"凯尔特人"四个字符:和我在学习mysql中显然是不一样的,查阅资料发现: mysql 5.0 之 ...