全文搜索indexeddb,示例实现

Hay*_*ian 3 full-text-search indexeddb

我很清楚它没有在规范中描述,但是如果我可以从我的后端获取一个关键字数组,比如说'article'对象,我将如何使用给定的搜索短语搜索它?

我来自铁轨上的红宝石,如果这有助于解释


在网站周围浮动的一个突出示例是待办事项列表示例,另一个示例(请参阅:http://www.html5rocks.com/en/tutorials/indexeddb/uidatabinding/注意:已损坏为chrome)让我们想象主要模型在每种情况下,(todo任务和员工)除了文章中描述的内容之外还有一个关联的关键字数组.

现在说我希望得到基于关键字(或者员工示例的"文书工作")提到的"罗马历史"的任务,存储在相应的上述数组中.

怎么在h***你会这样做?


注意:我将使用它来构建一个谷歌Chrome打包应用程序和一个带有sencha touch 2或backbone.js的phonegap应用程序(如果其中一个或两者之一会使上述更容易,请告诉)

Kya*_*Tun 8

我计划在YDN-DB中实现非常简单的全文搜索.我在想如下:

  1. 使用全文注释对象存储的索引的模式,这有效地创建了关键字引用表.关键字引用表是父对象库的keyPath的一对多关系表.关系数据类型是数组,我认为它比多个引用条目更有效.
  2. 放置对象时,从索引值中拆分关键字并更新引用对象库的keyPath 的关键字引用表.
  3. 要查询全文搜索,请打开关键字参考表的关键字参考表,给出一系列搜索项.该范围将使用给定的搜索条件提取所有关键字.从结果对应的完整记录从父对象库中获取.搜索在单个事务中执行.

后来的关键光标可以扩展到包含相关阶段.

实现非常简单,检索速度非常快.

编辑:

YDN-DB-FULLTEXT repo中实现.

特征

  • 支持全语言频谱的基于Unicode的标记化.
  • 英语的词干和语音规范化.
  • 具有逻辑和/或附近的自由文本查询基本排名.
  • 支持完全匹配和前缀匹配.
  • 基于YDN-DB,存储机制可以是IndexedDB,WebSQL或localStorage.
  • 使用全文目录轻松灵活地配置.

API参考

使用search方法查询全文搜索.

db.search(catalog, query)
Run Code Online (Sandbox Code Playgroud)

使用add或put方法在存储到数据库期间索引文档.

查询格式是自由文本,其中隐式和/或/近似逻辑运算符适用于每个标记.使用双引号进行精确匹配, - 从结果中减去,使用*进行前缀搜索.

参数:

  • {string} catalog 全文搜索目录名称,如架构中所定义.
  • {string} query 自由文本查询字符串.

返回:

{!ydn.db.Request} 返回一个请求对象.

done: {Array}倒排索引的返回列表.倒排索引具有以下属性:storeName,primaryKey,score,tokens,表示用于原稿,原稿的主键,匹配质量得分和令牌对象数组的商店名称.令牌对象具有以下属性:keyPath,value并且loc表示原始文档的索引的关键路径,原始文档中的原始单词和文档中单词位置的数组列表.

fail: {Error} 如果删除密钥中的任何一个失败,则调用失败回调,并在各个元素中产生错误.

progress: {Array} 在索引检索期间,调度原始反向索引.

var schema = {
  fullTextCatalogs: [{
    name: 'name',
    lang: 'en',
      sources: [
        {
          storeName: 'contact',
          keyPath: 'first'
        }],
    ]},
    stores: [
      {
        name: 'contact',
        autoIncrement: true
      }]
};
var db = new ydn.db.Storage('db name', schema);
db.put('contact', [{first: 'Jhon'}, {first: 'Collin'}]);
db.search('name', 'jon').done(function(x) {
  console.log(x);
  db.get(x[0].storeName, x[0].primaryKey).done(function(top) {
    console.log(top);
  })
});
Run Code Online (Sandbox Code Playgroud)

全文目录

全文目录是一个或多个全文索引的逻辑分组.它在数据库模式中的数据库初始化中定义.

领域:

  • {string} name 全文目录名称.
  • {string=} lang语言.词干,分词和语音规范化都与语言有关.lang必须定义为正确索引.目前只有en很好的支持.有关更多语言,请查看自然 项目回购.
  • {Array} indexes全文索引.每个索引都有storeName和原始文档的源引用keyPath.值keyPath是要编入索引的文本.weight排名搜索结果时应用因子.这个值不存储在数据库中也可以在索引之后进行更改.

以下全文目录索引作者姓名firstlast记录值字段的权重更多first.

var catalog = {
  name: 'author-name',
  lang: 'en',
  sources: [{
    storeName: 'author',
    keyPath: 'first',
    weight: 1.0
  }, {
    storeName: 'author',
    keyPath: 'last',
    weight: 0.8
}]
Run Code Online (Sandbox Code Playgroud)

演示应用程序