我正在使用asp.net core和Razor-由于它是一个帮助系统,因此我想实现某种搜索功能,以基于搜索词带回超链接的结果列表。
我希望搜索基本上遍历
和标记中包含的内容,然后将其链接到适当的页面/视图。
最好的方法是什么?
我什至不知道如何处理自己的cshtml页面的实际内容,然后从那里去。
答案 0 :(得分:0)
这个问题太远了。但是,我可以为您提供一些指示。
首先,您需要确定您实际想要显示的内容以及该数据的存放位置。您的问题是“静态网页”,但随后您提到了.cshtml
。传统上,在创建自己的搜索时,您将有权访问某些特定的数据集(例如,数据库中的表)。与将其转储到网页上各个位置相比,最终结果 简单得多。
像Google这样的搜索引擎只能以这种方式建立索引,因为它们通常无法访问原始数据(尽管可以通过JSON-LD和其他形式的Schema.org标记来授予一定程度的“访问”权限) 。换句话说,他们实际上是不必要地从网页中读取内容,因为这是他们必须使用的内容。如果您直接访问数据,肯定不是您会采用的方法。
如果出于某种原因您实际上需要对自己网站的HTML内容编制索引,那么您基本上必须做大个子做的事情:创建一个机器人,按时间表运行它,抓取您的网站,通过链接,下载每个文档,然后解析和处理它。最终结果将是创建一组可以实际查询的结构化数据,这就是为什么如果您已经拥有这些数据,这一切几乎就是浪费的精力。
一旦有了数据,但是到了那里,您只需查询一下。在最基本的形式中,您可以将其存储在数据库中的表中,并直接对它发出SQL查询。您的搜索关键字/参数本质上是WHERE
语句中的SELECT
,因此您必须找出一种将收到的关键字/参数映射到可接受的WHERE
的方法子句可以达到目的。
更传统的是,您将使用实际的搜索引擎:本质上是为搜索而设计和优化的文档数据库,并且通常提供更适合搜索的API进行查询。在这个领域中,有很多选择,从您自己滚动到托管SaaS解决方案,以及介于两者之间的任何地方。当然,成本计会减少您要做的更多工作,而越多越好。
Elasticsearch是一种流行的开源且基本免费的选择。它使用Lucene索引,在群集环境中将其缝合在一起以提供故障转移和扩展。至少可以说,部署是一头野兽,尽管它在诸如容器化和编排之类的事情上已经变得更好。您可以相对轻松地在Kubernetes之类的系统中建立Elasticsearch集群,尽管您可能仍需要进行一些配置。 Elasticsearch确实也有托管选项,但您知道,费用。