6

我很清楚规范中没有描述它,但是如果我可以从后端为我的“文章”对象获取关键字数组,我将如何使用给定的搜索短语搜索它?

我来自 ruby​​ on rails,如果这有助于解释


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

现在假设我想根据存储在上述相应数组中的关键字(或员工示例的“文书工作”)来获取提及“罗马历史”的任务。

你怎么会这样做?


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

4

1 回答 1

8

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

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

稍后键光标可以扩展以包括相关阶段。

实现非常简单,检索应该非常快。

编辑:

YDN-DB-FULLTEXT 存储库中实现。

特征

  • 支持完整语言范围的基于 Unicode 的标记化。
  • 英语语言的词干和语音规范化。
  • 具有逻辑与、或和接近的自由文本查询基础排名。
  • 支持精确匹配和前缀匹配。
  • 基于 YDN-DB,存储机制可以是 IndexedDB、WebSQL 或 localStorage。
  • 使用全文目录进行简单灵活的配置。

API 参考

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

db.search(catalog, query)

使用 add 或 put 方法将文档在存储到数据库中时进行索引。

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

参数:

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

回报:

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

done: {Array}返回倒排索引列表。倒排索引具有以下属性:storeNameprimaryKeyscoretokens,分别表示原始文档的存储名称、原始文档的主键、匹配质量分数和令牌对象数组。Token 对象具有以下属性: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得到很好的支持。如需更多语言,请查看自然 项目 repo。
  • {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
}]

演示应用程序

于 2012-10-02T07:49:28.357 回答