news 2026/1/21 8:05:34

Cordova与OpenHarmony全文搜索功能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cordova与OpenHarmony全文搜索功能

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。

全文搜索系统概述

全文搜索功能允许用户快速查找应用中的任何内容。在Cordova框架与OpenHarmony系统的结合下,我们需要实现一个高效的搜索系统,支持多种搜索类型和过滤选项。

搜索引擎数据模型

classSearchIndex{constructor(){this.index=newMap();// 关键词 -> 结果数组this.buildIndex();}buildIndex(){// 索引植物plants.forEach(plant=>{this.addToIndex(plant.name,{type:'plant',data:plant});this.addToIndex(plant.species,{type:'plant',data:plant});});// 索引分类categoryManager.categories.forEach(cat=>{this.addToIndex(cat.name,{type:'category',data:cat});});// 索引标签tagManager.tags.forEach(tag=>{this.addToIndex(tag.name,{type:'tag',data:tag});});}addToIndex(keyword,result){constkey=keyword.toLowerCase();if(!this.index.has(key)){this.index.set(key,[]);}this.index.get(key).push(result);}search(keyword){constkey=keyword.toLowerCase();constresults=[];// 精确匹配if(this.index.has(key)){results.push(...this.index.get(key));}// 模糊匹配for(const[indexKey,indexResults]ofthis.index.entries()){if(indexKey.includes(key)&&indexKey!==key){results.push(...indexResults);}}returnresults;}}

这个搜索引擎数据模型定义了SearchIndex类。它建立了一个倒排索引,支持精确匹配和模糊匹配。

与OpenHarmony搜索服务的集成

functionperformFullTextSearch(keyword){cordova.exec(function(result){console.log("搜索完成");renderSearchResults(result);},function(error){console.error("搜索失败:",error);},"SearchPlugin","search",[{keyword:keyword,searchTypes:['plants','categories','tags','records'],limit:50}]);}functionindexContent(){cordova.exec(function(result){console.log("内容已索引");},function(error){console.error("索引失败:",error);},"SearchPlugin","indexContent",[{plants:plants,categories:categoryManager.categories,tags:tagManager.tags}]);}

这段代码展示了如何与OpenHarmony的搜索服务集成。performFullTextSearch函数执行搜索,indexContent函数建立索引。

搜索结果展示

functionrenderSearchResults(results){constcontainer=document.getElementById('page-container');container.innerHTML=`<div class="search-results-container"> <h2>搜索结果</h2> <p>找到${results.length}个结果</p> </div>`;if(results.length===0){container.innerHTML+='<p class="empty-message">未找到匹配的结果</p>';return;}// 按类型分组结果constgroupedResults={};results.forEach(result=>{if(!groupedResults[result.type]){groupedResults[result.type]=[];}groupedResults[result.type].push(result);});// 渲染每个类型的结果Object.keys(groupedResults).forEach(type=>{consttypeResults=groupedResults[type];consttypeSection=document.createElement('div');typeSection.className='result-type-section';typeSection.innerHTML=`<h3>${getTypeLabel(type)}(${typeResults.length})</h3>`;typeResults.forEach(result=>{constresultItem=document.createElement('div');resultItem.className='result-item';if(result.type==='plant'){resultItem.innerHTML=`<h4>${result.data.name}</h4> <p>物种:${result.data.species}</p> <p>位置:${result.data.location}</p> <button onclick="viewPlantDetails('${result.data.id}')">查看</button>`;}elseif(result.type==='category'){resultItem.innerHTML=`<h4>${result.data.name}</h4> <p>${result.data.description}</p> <button onclick="viewCategory('${result.data.id}')">查看</button>`;}elseif(result.type==='tag'){resultItem.innerHTML=`<h4>${result.data.name}</h4> <p>使用次数:${result.data.usageCount}</p> <button onclick="viewTag('${result.data.id}')">查看</button>`;}typeSection.appendChild(resultItem);});container.appendChild(typeSection);});}functiongetTypeLabel(type){constlabels={'plant':'🌿 植物','category':'📂 分类','tag':'🏷️ 标签','record':'📝 记录'};returnlabels[type]||type;}

这个函数负责渲染搜索结果。结果按类型分组展示,用户可以快速查看不同类型的搜索结果。

搜索页面

functionrenderSearchPage(){constcontainer=document.getElementById('page-container');container.innerHTML=`<div class="search-page"> <div class="search-header"> <h2>全文搜索</h2> <div class="search-box"> <input type="text" id="search-input" placeholder="搜索植物、分类、标签..."> <button onclick="executeSearch()">🔍 搜索</button> </div> </div> <div class="search-filters"> <label> <input type="checkbox" id="filter-plants" checked> 植物 </label> <label> <input type="checkbox" id="filter-categories" checked> 分类 </label> <label> <input type="checkbox" id="filter-tags" checked> 标签 </label> <label> <input type="checkbox" id="filter-records" checked> 记录 </label> </div> <div id="search-results"></div> </div>`;document.getElementById('search-input').addEventListener('keypress',function(e){if(e.key==='Enter'){executeSearch();}});}functionexecuteSearch(){constkeyword=document.getElementById('search-input').value;if(!keyword){showToast('请输入搜索关键词');return;}constfilters={plants:document.getElementById('filter-plants').checked,categories:document.getElementById('filter-categories').checked,tags:document.getElementById('filter-tags').checked,records:document.getElementById('filter-records').checked};performFullTextSearch(keyword);}

这个函数创建搜索页面,包括搜索框和过滤选项。用户可以输入关键词并选择搜索类型。

搜索历史管理

classSearchHistory{constructor(maxHistory=20){this.history=[];this.maxHistory=maxHistory;this.loadFromStorage();}addSearch(keyword){// 移除重复的搜索this.history=this.history.filter(h=>h!==keyword);// 添加到开头this.history.unshift(keyword);// 保持历史记录数量在限制内if(this.history.length>this.maxHistory){this.history.pop();}this.saveToStorage();}getHistory(){returnthis.history;}clearHistory(){this.history=[];this.saveToStorage();}}

这个SearchHistory类管理用户的搜索历史。用户可以查看之前的搜索并快速重复搜索。

搜索建议功能

functiongetSearchSuggestions(keyword){constsuggestions=[];// 从植物名称获取建议plants.forEach(plant=>{if(plant.name.toLowerCase().includes(keyword.toLowerCase())){suggestions.push({text:plant.name,type:'plant',icon:'🌿'});}});// 从分类获取建议categoryManager.categories.forEach(cat=>{if(cat.name.toLowerCase().includes(keyword.toLowerCase())){suggestions.push({text:cat.name,type:'category',icon:'📂'});}});// 从标签获取建议tagManager.tags.forEach(tag=>{if(tag.name.toLowerCase().includes(keyword.toLowerCase())){suggestions.push({text:tag.name,type:'tag',icon:'🏷️'});}});returnsuggestions.slice(0,10);// 返回前10个建议}functionrenderSearchSuggestions(suggestions){constsuggestionsList=document.createElement('div');suggestionsList.className='suggestions-list';suggestions.forEach(suggestion=>{constitem=document.createElement('div');item.className='suggestion-item';item.innerHTML=`<span class="suggestion-icon">${suggestion.icon}</span> <span class="suggestion-text">${suggestion.text}</span>`;item.onclick=()=>{document.getElementById('search-input').value=suggestion.text;executeSearch();};suggestionsList.appendChild(item);});returnsuggestionsList;}

这段代码实现了搜索建议功能。当用户输入时,系统会显示相关的建议,帮助用户快速找到所需内容。

搜索统计

classSearchStatistics{constructor(searchHistory){this.searchHistory=searchHistory;}getMostSearchedKeywords(limit=10){constcounts={};this.searchHistory.history.forEach(keyword=>{counts[keyword]=(counts[keyword]||0)+1;});returnObject.entries(counts).sort((a,b)=>b[1]-a[1]).slice(0,limit).map(([keyword,count])=>({keyword,count}));}getSearchTrends(){returnthis.searchHistory.history.slice(0,20);}}

这个SearchStatistics类提供了搜索的统计功能。getMostSearchedKeywords返回最常搜索的关键词,getSearchTrends返回最近的搜索趋势。

总结

全文搜索功能是植物养护应用的重要功能。通过高效的搜索引擎和与OpenHarmony搜索服务的集成,我们可以创建一个功能完整的搜索系统,帮助用户快速找到所需的信息。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/30 8:13:15

初次约会“社交算法”:高效对话框架让好感度指数级增长

一、需求分析与背景设定在情感社交场景中&#xff0c;初次约会可被视为一次关键的用户体验测试。许多技术从业者面临一个共同痛点&#xff1a;在代码世界游刃有余&#xff0c;但在面对面的情感交流中却常常陷入“系统异常”。本文将从结构化思维出发&#xff0c;为你构建一套高…

作者头像 李华
网站建设 2025/12/30 6:22:51

进度跟踪模块 Cordova 与 OpenHarmony 混合开发实战

&#x1f4cc; 概述 进度跟踪模块允许用户跟踪目标的完成进度。该模块集成了 Cordova 框架与 OpenHarmony 原生能力&#xff0c;提供了完整的进度更新和可视化展示。用户可以查看目标的当前进度、剩余时间和完成预测。模块支持进度的快速更新和历史记录查看。 &#x1f517; 完…

作者头像 李华
网站建设 2026/1/1 16:20:17

算法学习02|单调队列(上)学习总结

依旧是学习左神的课程&#xff1a;单调队列&#xff08; 上&#xff09; 单调队列的定义 单调队列&#xff0c;顾名思义&#xff0c;在实现一个双端队列&#xff08;队头队尾都可以插入、弹出元素&#xff09;的基础上&#xff0c;保持队列的数据从大到小&#xff08;从小到大…

作者头像 李华
网站建设 2026/1/19 4:53:10

Java并发编程基础:从线程管理到高并发应用实践

1. 理解线程&#xff1a;多任务执行的基石 1.1 什么是线程&#xff1f; 在现代操作系统中&#xff0c;进程是资源分配的基本单位&#xff0c;而线程是CPU调度的最小单位。可以把进程想象成一家公司&#xff0c;线程就是公司里的员工。 /** * 演示Java程序天生就是多线程程序 …

作者头像 李华
网站建设 2026/1/17 22:43:04

记一次 Kubebuilder Operator 开发中的 CRD 注解超限问题

概念厘清&#xff1a;注解、CSA 与三路合并的来龙去脉要理解这个问题&#xff0c;需要先弄清楚几个关键概念。1. annotations 是什么&#xff1f;在 Kubernetes 中&#xff0c;注解是与对象关联的键值对&#xff0c;用于存储非标识性的元数据。这些信息可以被工具、库或控制器读…

作者头像 李华
网站建设 2026/1/18 11:49:57

约翰·伯格的资产配置理论

约翰伯格的资产配置理论 关键词:约翰伯格、资产配置理论、投资组合、风险分散、长期投资 摘要:本文深入探讨了约翰伯格的资产配置理论。该理论强调通过合理的资产配置实现风险分散和长期稳定的投资回报。文章首先介绍了理论提出的背景,包括目的、预期读者和文档结构等内容。…

作者头像 李华