网页的“搜索”功能该如何设计?

网页的“搜索”功能指的就是可以在这个搜索栏中搜索到你网站中部分或全部信息,支持模糊搜索,关键词搜索等 。因为搜索范围越大,你所消耗的时间也越久 。对于页面前端的搜索栏的设计,这个我就不介绍,非常简单,我这里主要介绍一下搜索功能的设计 。
功能设计前,你需要考虑你网页的“搜索”功能的范围是哪一些,比如文章类的网站,用户可以在“搜索栏”中输入一个字或词,只要文章的标题,标签,简介,内容中包含这个字或词的文章都会出现 。他的搜索范围就是标题,标签,简介,内容 。只有在设计时定位好了你的功能范围,你才能进入下一步的设计 。
搜索的数据不建议放在关系型数据库里,如果你的搜索只是小范围,并且内容不多,如果不支持模糊查询,那可以在关系型数据库中 。反之,一旦模糊查询,关系型数据库是不走索引,会导致全表扫描去寻找与“搜索栏”有关的数据 。如果你的表数据量很大,你的搜索性能越差 。
建议你采用ES(elasticsearch)进入数据存储,把你要搜索的数据放在这里,然后写对接的搜索接口,他的速度是很快的 。以下是ES的简介
【网页的“搜索”功能该如何设计?】ElasticSearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎 。它能很方便的使大量数据具有搜索、分析和探索的能力 。充分利用ElasticSearch的水平伸缩性,能使数据在生产环境变得更有价值 。ElasticSearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elastic Search 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户 。Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的 。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”) 。Elasticsearch可以用于搜索各种文档 。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户 。”Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本 。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片 。再平衡和路由是自动完成的 。“相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成 。一旦创建了索引,就不能更改主分片的数量 。Elasticsearch使用Lucene,并试图通过JSON和Java API提供其所有特性 。它支持facetting和percolating,如果新文档与注册查询匹配,这对于通知非常有用 。另一个特性称为“网关”,处理索引的长期持久性;例如,在服务器崩溃的情况下,可以从网关恢复索引 。Elasticsearch支持实时GET请求,适合作为NoSQL数据存储,但缺少分布式事务 。[1] 历史与发展编辑Shay Banon在2004年创造了Elasticsearch的前身,称为Compass 。在考虑Compass的第三个版本时,他意识到有必要重写Compass的大部分内容,以“创建一个可扩展的搜索解决方案” 。因此,他创建了“一个从头构建的分布式解决方案”,并使用了一个公共接口,即等的传输协议(通过插件方式集成) 。

    推荐阅读