0

0

怎样实现一个基于 JavaScript 的简单搜索引擎?

狼影

狼影

发布时间:2025-10-06 17:18:02

|

441人浏览过

|

来源于php中文网

原创

答案是基于JavaScript实现轻量级搜索引擎,通过预加载JSON数据、使用filter进行文本匹配,并支持多关键词与权重排序,结合输入事件实时展示结果。

怎样实现一个基于 javascript 的简单搜索引擎?

实现一个基于 JavaScript 的简单搜索引擎,核心是文本匹配和快速检索。不需要复杂的后端或数据库,适合静态网站或小型应用。关键思路是:预加载数据、建立关键词索引、执行模糊或精确匹配,并返回相关结果。

1. 准备搜索数据

搜索的前提是有内容可查。可以把文章标题、描述、正文等信息存成 JSON 格式,作为本地数据源。

例如:
[
  {
    "id": 1,
    "title": "JavaScript 基础入门",
    "content": "学习变量、函数、对象等基础知识"
  },
  {
    "id": 2,
    "title": "DOM 操作详解",
    "content": "如何用 JavaScript 修改网页结构"
  }
]

这些数据可以内联在页面中,也可以通过 fetch() 从外部 JSON 文件加载。

2. 构建简单的搜索逻辑

不需要倒排索引这类复杂结构,可以用数组的 filter() 方法实现关键词匹配。

立即学习Java免费学习笔记(深入)”;

基本步骤:

  • 获取用户输入的搜索词
  • 将搜索词转为小写(避免大小写问题)
  • 遍历数据列表,检查标题或内容是否包含该词
  • 返回匹配的结果数组
示例代码:
function search(query, data) {
  const term = query.toLowerCase();
  return data.filter(item =>
    item.title.toLowerCase().includes(term) ||
    item.content.toLowerCase().includes(term)
  );
}

3. 支持多关键词和权重优化

让搜索更智能一点,可以拆分多个词分别匹配,并给标题更高权重。

BJXSHOP网上开店专家
BJXSHOP网上开店专家

BJXShop网上购物系统是一个高效、稳定、安全的电子商店销售平台,经过近三年市场的考验,在中国网购系统中属领先水平;完善的订单管理、销售统计系统;网站模版可DIY、亦可导入导出;会员、商品种类和价格均实现无限等级;管理员权限可细分;整合了多种在线支付接口;强有力搜索引擎支持... 程序更新:此版本是伴江行官方商业版程序,已经终止销售,现于免费给大家使用。比其以前的免费版功能增加了:1,整合了论坛

下载

改进方法:

  • split(' ') 分割查询词
  • 统计每个文档匹配了多少个词
  • 优先显示标题匹配的结果
示例增强逻辑:
function searchWithScore(query, data) {
  const terms = query.toLowerCase().trim().split(/\s+/);
  return data
    .map(item => {
      let score = 0;
      const title = item.title.toLowerCase();
      const content = item.content.toLowerCase();
  terms.forEach(term => {
    if (title.includes(term)) score += 2;  // 标题匹配加分
    if (content.includes(term)) score += 1;
  });

  return { ...item, score };
})
.filter(result => result.score > 0)
.sort((a, b) => b.score - a.score);  // 按得分排序

}

4. 在页面中集成搜索功能

绑定输入框和结果显示区域,实时或点击触发搜索。

HTML 示例:

JavaScript 监听输入:

document.getElementById('searchInput').addEventListener('input', e => {
  const query = e.target.value;
  const results = searchWithScore(query, searchData);
  displayResults(results);
});

displayResults() 函数负责把结果渲染到页面上,可用 innerHTML 生成列表。

基本上就这些。一个轻量、响应快的前端搜索引擎就完成了。适合文档站、博客、帮助中心等场景。不复杂但容易忽略的是:性能优化(比如防抖输入)、特殊字符处理、中文分词简化等。后续可扩展高亮关键词、拼音匹配或离线存储。

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

557

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

395

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

756

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

478

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

474

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

1051

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

658

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

554

2023.09.20

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【李炎恢】ThinkPHP8.x 后端框架课程
【李炎恢】ThinkPHP8.x 后端框架课程

共50课时 | 4.5万人学习

光速学会docker容器
光速学会docker容器

共33课时 | 1.9万人学习

第二十四期_前端开发
第二十四期_前端开发

共161课时 | 4.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号