全文搜索indexeddb,示例实现

时间:2012-10-02 07:09:52

标签: full-text-search indexeddb

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

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


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

现在说我想要根据关键字(或者员工示例中的“文书工作”)提到“罗马历史”的任务,存储在相应的上述数组中。

你怎么会这样做?


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

1 个答案:

答案 0 :(得分:8)

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

  1. 使用全文为对象库的索引添加模式,从而有效地创建关键字引用表关键字引用表是父对象库的keyPath的一对多关系表。关系数据类型是数组,我认为它比多个引用条目更有效。
  2. 放置对象时,从索引值中拆分关键字并更新引用对象库的keyPath的关键字引用表
  3. 要查询全文搜索,请将键光标打开到关键字参考表,以提供一系列搜索字词。该范围将使用给定的搜索条件提取所有关键字。从结果对应的完整记录从父对象库中获取。搜索在单个事务中执行。
  4. 以后的关键光标可以扩展到包含相关阶段。

    实施非常简单,检索速度非常快。

    编辑:

    YDN-DB-FULLTEXT repo。

    中实施

    功能

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

    API参考

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

    db.search(catalog, query)
    

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

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

    参数:

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

    返回:

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

    done: {Array}倒排索引的返回列表。倒排索引具有   以下属性:storeNameprimaryKeyscoretokens,代表   存储原始文件名,原始文件主键,匹配   质量得分和令牌对象数组。令牌对象具有以下内容   属性:keyPathvalueloc表示索引的关键路径   原始文件,原始文件和原始文件列表   文件中的单词位置。

    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);
      })
    });
    

    全文目录

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

    字段:

    • {string} name全文目录名称。
    • {string=} lang语言。词干,分词和语音规范化 是语言依赖的。必须定义lang以正确索引。目前 只有en得到很好的支持。有关更多语言,请查看natural 项目回购。
    • {Array} indexes全文索引。每个索引都有源引用 storeNamekeyPath的原始文档。 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
    }]
    

    演示应用程序