elasticlunr.js 最新版本v0.6.7发布啦
来源:互联网 发布:如何开通淘宝直通车 编辑:程序博客网 时间:2024/05/16 09:43
本小编写的第一个有点实用价值的开源类库elasticlunr.js刚刚发布了最新的版本v0.6.7, 该项目是在lunr.js的基础上进行大幅度改进生成的。希望各位帮忙做code review,本人并不熟悉javascript, 还有,如果方便的话希望给位帮忙在github上点赞,嘿嘿,您的一个赞,是我继续努力改进该项目的最大动力来源。
本项目的主页:elasticlunr.js
项目代码:elasticlunr.js code
项目文档: elasticlunr.js doc
项目的npm发布地址: elasticlunr.js npm
项目在线演示地址: elasticlunr.js demo
目前,与lunr相比,比较大的改动主要有:
1. Query-Time Boosting, 目前elasticlunr支持查询时的权重调整,可以方便的根据不同的应用场景调整不同field的权重,不用在建立索引的时候直接写入不可以调整的field weight.
2. More Rational Scoring Mechanism, 目前elasticlunr.js采用和elasticsearch 以及 lucence完全一直的文档评分准则,比lunr.js的评分更加准确、客观。目前采用的评分准则在通用的tf
idf
tf*idf
还做了field length normalization, field length normalization 有点像BM25模型,如果一个field太长,会导致tf比较大,做了field length normalization以后能够对长field的tf做一个penality;同时,elasticlunr.js还做了coord normalization 和 query normalization, 将query-time boosting 信息enroll 到了query normalization中。关于Elasticlurn和elasticsearch是如何具体的做scoring的,请参考我的文章Elasticsearch scoring detailed explanation.
3. Field-Search, 用户建立索引的时候,可以指定文档的哪些field需要建立到索引中,同时,用户在查询的时候可以指定要查找哪些field, 可以指定给每个field 多少权重,这样能够实现非常灵活的查询。
4. Boolean Model, 用户查询的时候可以指定全局的boolean model, 也可以指定某个field的boolean model, field boolean model 会覆盖全局的boolean model, 这样用户就可以指定是否需要在某个field中包含全部的query tokens.
5. Combined Boolean Model, TF/IDF Model and the Vector Space Model, 目前elasticlunr整合了boolean model, tf/idf model 和 vector space model 进行文档ranking分数的计算,这个计算使得文档的ranking准确性更好。文档分数计算请见:Elasticsearch scoring detailed explanation. 未来还会包括其他的ranking model, 例如BM25 Model.
6. Fast, elasticlunr.js在计算文档相似度的时候不用计算query 的向量和文档的向量,没有采用vector space model, 而是采用计算每个query token在出现文档中的score, 然后把每个query token的score累加起来,最后进行query normalization, 所以在进行query的时候计算速度比较快。
7. Small Index Size, elasticlunr.js没有存储token corpus, 因为没有必要计算文档向量,这样可以节省一部分存储大小;同时,elasticlunr.js用户可以设置是否存储json格式的文档,如果用户比较关心index的大小,可以设置为不存储json格式的documents;最重要的部分是,elasticlunr.js 优化了index的存储信息,使得index的大小可以降低到原来的一般左右。
应用示例
建立索引
如果用户不设置是否存储文档,默认为存储,这样用户可以用JSON文档生成摘要:
var index = elasticlunr(function () { this.addField('title'); this.addField('body'); this.setRef('id');});
用户可以设置不存储JSON文档:
var index = elasticlunr();index.addField('title');index.addField('body');index.setRef('id');index.saveDocument(false);
索引文档
Adding documents to the index is as simple as:
直接可以索引JSON格式的文档
var doc1 = { "id": 1, "title": "Oracle released its latest database Oracle 12g", "body": "Yestaday Oracle has released its new database Oracle 12g, this would make more money for this company and lead to a nice profit report of annual year."}var doc2 = { "id": 2, "title": "Oracle released its profit report of 2015", "body": "As expected, Oracle released its profit report of 2015, during the good sales of database and hardware, Oracle's profit of 2015 reached 12.5 Billion."}index.addDoc(doc1);index.addDoc(doc2);
简单文档检索
index.search("Oracle database profit");
检索结果:
[{ "ref": 1, "score": 0.5376053707962494},{ "ref": 2, "score": 0.5237481076838757}]
因为elasticlunr.js已经有非常复杂的、合理的评分系统,所以大部分情况下用户只需要使用最简单的查询就可以满足需要,当然如果用户比较熟悉检索原理的话,也可通过配置实现更加复杂的、针对不同应用情况的检索。
field search && configuration
用户可以指定查询哪些field, 给每个field多少权重,在每个field中使用哪个boolean model进行检索。
index.search("Oracle database profit", { fields: { title: {boost: 2}, body: {boost: 1} }, bool: "OR"});
上面的查询例子通过设定全局的bool model表示在每个field中,都采用这个bool model, 如果在某个field中指定了其他的bool model,那么field的bool model 会覆盖全局的bool model, 例如:
index.search("Oracle database profit", { fields: { title: {boost: 2, bool: "AND"}, body: {boost: 1} }, bool: "OR"});
为什么你需要elasticlunr.js?
在很多情况下,你可能想让自己的一些文档能够实现检索的功能,但是又不想提供太复杂服务器环境配置,这时候你可以完全用elasticlunr.js建立文档索引,然后在浏览器中使用搜索功能,你只需要在服务器上提供简单的apache静态网页服务即可。
很多时候用户可能在受限的网络环境下,不能总是访问网络或者访问网络的成本比较大,例如移动设备,这个时候如果能共提供离线的文档并支持搜索功能,对于用户来说是非常友好的。例如,某个模块的文档,用户往往在下载模块的时候就已经包含文档了,如果用户在本地使用这些文档的话,提供搜索功能是非常有用的。
- elasticlunr.js 最新版本v0.6.7发布啦
- Elasticlunr.js 支持其他语言 V0.9.5
- geckodrive 最新版本v0.19.1
- Elasticlunr.js 简介
- VMware 最新版本 14 发布啦,此次更新了一个大版本!
- X9BYOD_V3.0.3版本发布啦
- 统一加速器发布 pro V0.9805 版本
- 前端搜索JS库 Elasticlunr.js
- OpenShot 发布 2.3.2 版本啦!
- OpenShot 发布 2.3.2 版本啦!
- [原创]JWFD v0.96 版本的发布说明
- ITF接口自动化测试框架 V0.8版本发布
- Deweb V0.2 发布! 第一个可交互的版本
- Pytorch v0.3.0中文文档,Pytorch v0.3.0版本文档发布
- Node.js升级最新版本
- 微软Silverlight 2.0 最新版本GDR发布
- 购物兔发布最新版本1.0.7.40
- shop++ jtm2.5最新版本发布
- 只开启一个exe应用程序
- 网站后台登录页面始终始终为父窗体的解决办法
- 通过手机浏览器跳转到指定的Activity
- Shiro学习(1)简介
- VS2015编写Win10通用应用提示error CS0012的问题解决方案
- elasticlunr.js 最新版本v0.6.7发布啦
- 快速排序 快速搞定
- jquery中ul > li是什么意思?
- MVC框架
- 手机端实现打印功能
- yum本地源搭建
- C# List的排序问题
- java封装
- MYSQL 使用大全