前端实现全局搜索

ps:vue 中实现

1.js 部分

实现展示搜索结果

  computed:{
          lists(){
            const search = this.search.toLowerCase();
            if (search) {
              // filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
              return this.dormitory.filter(data => {
              
                return Object.keys(data).some(key => {
                
                  return String(data[key]).toLowerCase().indexOf(search) > -1
                })
              })
            }
            return this.dormitory
          }
        },
lists //展示list
dormitory //全数据

  // some() 方法用于检测数组中的元素是否满足指定条件;
  // some() 方法会依次执行数组的每个元素:
  // 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测;
  // 如果没有满足条件的元素,则返回false。

 // 注意: filter() 、 some()  不会对空数组进行检测。
 // 注意: filter() 、 some()  不会改变原始数组。

.toLowerCase()转换为小写

实现全局搜索功能通常涉及多个层面的开发工作,包括前端页面的交互设计、后端数据的处理逻辑以及数据库的查询优化等。以下是一个较为完整的实现方案: ### ### 前端实现 前端部分主要负责用户输入的处理和搜索结果的展示。可以通过 HTML、CSS 和 JavaScript 实现基本的搜索框和结果展示区域。为了提升用户体验,可以使用 AJAX 技术实现异步搜索,避免页面刷新。 ```html <!-- 搜索框 --> <input type="text" id="searchInput" placeholder="请输入搜索内容"> <button onclick="performSearch()">搜索</button> <!-- 搜索结果展示 --> <div id="searchResults"></div> <script> function performSearch() { const query = document.getElementById('searchInput').value; fetch(`/api/search?query=${encodeURIComponent(query)}`) .then(response => response.json()) .then(data => { const resultsDiv = document.getElementById('searchResults'); resultsDiv.innerHTML = ''; data.forEach(item => { const div = document.createElement('div'); div.textContent = item.name; resultsDiv.appendChild(div); }); }); } </script> ``` ### ### 后端实现 后端需要提供一个 API 接口来处理前端发送的搜索请求。可以使用 Spring Boot(Java)或者 Express(Node.js)等框架来实现。以下是一个简单的 Java 示例: ```java @RestController public class SearchController { @Autowired private SearchService searchService; @GetMapping("/api/search") public List<SearchResult> search(@RequestParam String query) { return searchService.performSearch(query); } } ``` ### ### 数据库查询优化 为了提高搜索效率,可以使用全文搜索引擎如 Elasticsearch 或者数据库的全文索引功能。以下是一个简单的 SQL 查询示例: ```sql SELECT * FROM items WHERE name LIKE '%query%'; ``` 对于更复杂的搜索需求,可以使用 Elasticsearch 进行索引和查询: ```java public List<SearchResult> performSearch(String query) { SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("name", query); sourceBuilder.query(matchQuery); SearchRequest searchRequest = new SearchRequest("items"); searchRequest.source(sourceBuilder); SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT); // 处理响应结果 return processSearchResponse(response); } ``` ### ### 排序与结果展示 在搜索结果返回后,可以根据相关性进行排序。例如,可以根据匹配位置进行排序,匹配位置越靠前,优先级越高[^1]。 ```java filterList.sort((x, y) -> Integer.compare(x.getIndex(), y.getIndex())); ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值