使用 dtSearch® ASP.NET Core WebDemo 示例应用程序





2.00/5 (1投票)
dtSearch 在 dtSearch Engine 产品中提供的 ASP.NET Core WebDemo 应用程序的一些功能包括滚动词汇列表、分面搜索导航和多色命中高亮显示。
引言
在本文中,我将向您展示 dtSearch 在 dtSearch Engine 产品中提供的 ASP.NET Core WebDemo 应用程序的一些功能。功能包括滚动词汇列表、分面搜索导航和多色命中高亮显示。本文概述的功能在 dtSearch Engine 版本 7.91 build 8546 或更高版本中可用。使用演示还需要 Visual Studio 2017 更新到 15.5 或更高版本。
在 dtSearch 开发者产品发布的众多版本中,开发者一直赞赏的一点是 dtSearch 提供的代码示例,用于展示如何使用各种功能。与一些提供简短代码片段来展示功能使用方法的公司不同,dtSearch 以实际应用的方式展示了许多功能的使用方法,通常允许开发者在自己的应用程序中稍作修改即可使用这些代码。ASP.NET Core WebDemo 示例应用程序就是一个很好的例子。
.NET Core 实现也是开发跨平台应用程序的一个良好起点。您可以在此处从 Microsoft 阅读更多关于此内容的信息:此处。dtSearch 通过包含 ASP.NET Core WebDemo 以及使用 .NET Standard 库的其他平台的示例代码来突出这一点,如下图所示,位于 NetStd 的示例文件夹中。
您可以在 dtSearch 网站上尝试 Web 演示:此处。
当您输入搜索请求时,演示会提供一个滚动的词汇列表。
此屏幕截图显示了分面搜索和文档显示,包括命中高亮显示的导航选项。
设置示例数据
对于示例数据,演示依赖于一个名为 EDGAR 的 SEC 文件集合。EDGAR 数据来自 SEC 网站:此处。
实际需要下载的文件是 *.gz 文件,它们位于:此处。
*.gz 文件包含一系列 *.nc 文件,每个文件代表一次申报。*.nc 文件又包含元数据和以独特的 SEC 格式表示的文档。dtSearch 有一个实用程序 EdgarExtract.exe(位于 此处),它可以将单个 *.gz 文件解压缩到一个文件夹树中,如下所示:
EdgarExtract 20180102.nc.tar.gz k:\edgar\2018
EdgarExtract 20180103.nc.tar.gz k:\edgar\2018
***
对于每个解压缩的文件,EdgarExtract 将创建一个 props.xml 文件,其中包含与该文件相关的元数据,包括分面信息。
注意:EdgarExtract 只是一个用于从 SEC 文件生成示例数据的快速实用程序,因此它并不一定能提取 *.nc 文件中可能存储的所有内容。
一旦您下载了数据,就可以开始索引数据了。
索引示例数据
要按照 WebDemo
的方式索引示例数据
- 指定为存储字段:
Company
、CompanyState
、FilingType
、CompanySic
- 指定为可枚举字段(用于分面搜索):
CompanyState FilingType CompanySic
- 告知 dtSearch 查找 EdgarExtract 创建的 *.props.xml 文件。为此,必须在
Options.OtherFlags
中设置未文档化的内部标志dtsFlagUsePropsXml
(16) - 启用文档和文本的缓存,这样索引将是您显示检索到的文档和高亮显示命中的唯一所需。
使用 dtSearch Desktop 执行此操作:
- 启动 dtSearch Desktop
- 按 F12 启用“开发者模式”
- 在“选项”>“首选项”>“开发者选项”中,将“其他标志”设置为 16。这将告知 dtSearch 查找 EdgarExtract 创建的 *.props.xml 文件,以使用 SEC 的元数据注释每个文档。
- 运行 dtSearch Desktop 索引器并单击“创建(高级)”
- 在“搜索结果中显示的字段”列表中:
Company CompanyState FilingType CompanySic
- 单击“分面”按钮以访问分面搜索选项(启用开发者模式即可显示此选项)。在“分面搜索字段”下,输入:
CompanyState FilingType CompanySic
- 勾选相应的复选框以启用文档缓存和文本缓存。
- 创建索引
- 像往常一样使用这些推荐的过滤器将文档添加到索引中
- 包含:*.pdf *.htm* *.rtf *.doc* *.xls* *.ppt* *.xml *.txt
- 排除:*.props.xml *abs-ee*.xml
主要演示功能
由于 WebDemo
的深度,我将重点介绍各种对象及其封装的功能,而不是逐行讲解。这些对象中的第一个是 Index.cshtml 对象及其配套的 C# 文件。这份文件非常值得您自行阅读。
Index.cshtml 和 Index.cshtml.cs
Index.chtml 文件主要由 SearchModel
类组成。
它同时支持 POST
和 GET
请求。POST
请求将来自搜索表单。GET
请求将来自搜索结果页面中创建的链接,用于发起其他搜索。创建了两种类型的链接:
- 由
SearchPager
类生成的,用于转到搜索结果其他页面的搜索; - 由
SearchFacets
类生成的,用于处理分面搜索的搜索。
索引通过 IndexId
而不是路径来标识,以避免通过 Web 暴露索引路径。AppSettings.json/AppSettings.cs 中的表提供了索引 ID 和索引路径之间的映射。
滚动词汇列表
滚动词汇列表在服务器端通过 WordsController.cs 实现,该文件使用 dtSearch WordListBuilder
控件来枚举词汇。客户端 JavaScript 位于 wwwroot\js\for_WordList.js 中,并使用 AJAX 从服务器获取要显示的词汇。
为了获得最佳性能,请结合使用 IndexCache
对象和 WordListBuilder
。(否则,WordListBuilder
需要为每个传入的请求打开索引。)IndexCache
在 Startup.cs 中设置为单例,并通过依赖注入传递给 WordsController.cs 和 SearchModel.cs。
文档显示
演示包括在 IFRAME
(ViewDoc.cshtml) 中或在新窗口 (ViewDocEmbedded.cshtml) 中显示检索到的文档的选项。
演示不维护会话状态,因此打开每个文档的链接必须包含高亮显示该文档中命中所需的所有信息。SearchModel
中的 GetSearchResultsItem
方法处理此问题,使用 SearchResults.UrlEncode*
方法生成一个 UrlEncoded
表达式,用于链接的 HREF
属性。当单击链接时,使用一组相应的 UrlDecode*
方法来重新生成 SearchResults
项。
存在这些方法的 "WithIndexId
" 版本,允许使用提供的 IndexId
而不是索引路径。这样做是为了避免向 Web 用户暴露索引路径。
可以通过 appSettings.cs 中的一个选项启用多色命中高亮显示(为每个搜索词使用不同的颜色)。多色高亮显示需要更多信息在搜索时生成,因为 dtSearch Engine 需要知道哪个命中匹配每个搜索词。搜索时请求此信息的三个标志是:dtsSearchWantHitsByWord
、dtsSearchWantHitsArray
和 dtsSearchWantHitsByWordOrdinals
。
有关多色命中高亮显示的更多信息,请查看 本文。
由于这些信息是通过搜索生成的,因此每个搜索结果项的链接需要包含足够的信息来运行一个仅检索该项的搜索。SearchModel
中的 GetSearchResultsItem
方法处理此问题,使用 API 中的 SearchResults
. UrlEncodeItemAsSearchWithIndexId
方法。
SearchPager.cs
SearchPager
类处理搜索结果的分页。它通过 URL 编码搜索(使用 SearchUrlEncoder
)来生成结果的每一页。SearchResults.cshtml 中的 Bootstrap 分页控件用于显示生成每一页结果的链接。
SearchFacets.cs 和 FacetsColumn.cshtml
SearchFacets
负责实现分面搜索界面,而 FacetsColumn.cshtml 显示分面搜索信息。有关使用 dtSearch Engine 实现分面搜索界面的更多信息,请参阅
对于每个索引,适用于该索引的分面都会在 AppSettings.json 的索引表中列出。
演示中的分面来自 SEC Edgar 数据库。SEC Edgar 数据库是公开的证券申报文件集合。演示中的三个分面是:
CompanySic
:数字“SIC”代码,用于 Edgar 中标识业务类型。EdgarExtract 添加了描述性文本,因此该字段在数字代码括号中包含描述性文本。例如,SIC 代码 1311 表示为“Crude Petroleum & Natural Gas [1311]”。
CompanyState
:一个两位字母的代码,SEC 使用它来标识公司所在的州或国家。对于州,这只是通常的缩写(MD=Maryland),但对于国家,代码相当随意。同样,EdgarExtract 添加了描述性文本,后面跟着括号中的两位字母代码。
FilingType
:申报所对应的 SEC 表单。
AppSettings.json 中的分面表 CompanySic
和 CompanyState
被标记为 BracketKeys
属性,这告诉演示分面中的键值位于分面末尾的括号中。例如,如果有人点击分面“Crude Petroleum & Natural Gas [1311]”,这将生成一个包含条件“SicCode contains 1311”的搜索。
摘要
dtSearch 迄今为止提供的代码是我在处理其各种演示文稿时接触过的最完整的。dtSearch ASP.NET Core WebDemo 也不例外。无论您是在寻找使用分面搜索、WordListBuilder
,还是使用 ASP.NET Core 代码的许多其他功能的示例,这个演示都是一个很好的起点。
更多关于 dtSearch
dtSearch.com
口袋里的搜索引擎 – 介绍 Android 上的 dtSearch
云端疾速源代码搜索
使用 Azure 文件、RemoteApp 和 dtSearch,从任何计算机或设备跨越 PB 级数据的各种数据类型进行安全即时搜索
使用 dtSearch 引擎进行 Windows Azure SQL 数据库开发
使用 dtSearch 进行分面搜索 - 不是普通的搜索过滤器
使用 dtSearch® ASP.NET Core WebDemo 示例应用程序极速提升您的搜索体验
在您的 Windows 10 通用 (UWP) 应用程序中嵌入搜索引擎
使用 dtSearch Engine DataSource API 索引 SharePoint 网站集
使用 dtSearch® ASP.NET Core WebDemo 示例应用程序
在 AWS 上使用 dtSearch(
使用 dtSearch 和 AWS Aurora 进行全文搜索