前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 FlexSearch 实现快速且自动完成的内容搜索

使用 FlexSearch 实现快速且自动完成的内容搜索

作者头像
Tony He
发布2022-11-17 14:38:30
发布2022-11-17 14:38:30
2.8K00
代码可运行
举报
文章被收录于专栏:ouorz.comouorz.com
运行总次数:0
代码可运行

GayHub

https://github.com/nextapps-de/flexsearch

Web 最快且最具内存灵活性的全文搜索库,零依赖。

根据文档,FlexSearch 可在 Node.js 或 Web 端使用

背景

做 Snapaper 的最初就有想过做搜索功能,但进行各种搜寻研究后并没有找到合适的方案:

比如:js实现页内搜索、爬取原网站搜索结果等...

偶然刷 Github Trend 的时候发现了 FlexSearch,使用简单且高效。刚好在 Web 也提供了支持。

配合 Vue.js 食用更是不亦乐乎 🙂

代码

代码语言:javascript
代码运行次数:0
运行
复制
    var open_search = function(){
	    $('#search_div').css({'opacity':'1','z-index':'100'});
    }
    var close_search = function(){
	    $('#search_div').css({'opacity':'0','z-index':'-100'});
    }
    var search = new FlexSearch({
	    encode: "icase",
        tokenize: "full"
    });

    new Vue({
    el: '#search_div',
    data: {
        papers: null,
        cate: cate_get,
        sub: sub_get,
    	searched : [],
    	search_key : null
    },
    mounted() {
        axios.get('url')
        .then(response => {
            this.papers = response.data;
            this.count = response.data.count;
        }).then(()=>{
            for(var i_k=0;i_k<this.count;i_k++){
    			search.add(i_k,this.papers[i_k].name);
    		}
        })
    },
    methods: {
    	search_btn : function(){
    		this.searched = search.search(this.search_key);
    	}
    }
    });

↑ js 部分

代码语言:javascript
代码运行次数:0
运行
复制
<div id="search_div" class="search-div">
	<div class="search-div-inner">
        <h2 style="margin: 0px;">Search</h2>
        <p class="sub-title">Search by paper name</p>
		<button onclick="close_search()" class="uk-button uk-button-default close-btn">Close</button>
		<input v-model="search_key" placeholder="Search by paper name" v-on:input="search_btn" class="search-input"/>
        <div v-for="s in searched" class="search-item">
            <a :href="link ? 'https://papers.gceguide.xyz' + papers[s].name : 'https://papers.gceguide.com/'+ cate + '/' + sub + '/' + papers[s].name" target="_blank" class="searc-item-a" v-html="papers[s].name"></a>
        </div>
    </div>
</div>

↑ HTML 部分

代码语言:javascript
代码运行次数:0
运行
复制
    .search-div{
        opacity:0;z-index:-100;position: fixed;padding-top: 20vh;top: 0px;width: 100%;height: 100vh;background: rgb(255, 255, 255);overflow-y: auto;
    }
    .search-div-inner{
        width:40%;margin:0 auto
    }
    .sub-title{
        margin: 0px;font-weight: 300;color: #999;margin-bottom: 20px;
    }
    .close-btn{
        float: right;margin-top: -70px;margin-right: -20px;
    }
    .search-input{
        border: 2px solid #eee;padding: 10px 10px;border-radius: 4px;font-size: 1rem;color: #555;margin-bottom: 15px;width:100%
    }
    .search-item{
        padding: 8px 10px;border: 1px solid #eee;width: 100%;margin-bottom:5px
    }
    .search-item-a{
        color: #777;font-weight: 300;text-decoration: none;letter-spacing: 0.5px;
    }

↑ CSS 部分

预览

结合 Vue.js 可以实现快速响应的搜索

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GayHub
  • 背景
  • 代码
  • 预览
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档