如何在撇号cms中使用全身搜索自动完成

时间:2016-11-17 22:44:20

标签: apostrophe-cms

现在我有类似于

的东西
 var cursor = self.apos.docs.find(req, { highSearchText:  {$regex: new RegExp(self.apos.utils.regExpQuote(req.query.search), 'i') }  } )

 cursor.queryToFilters({ highSearchText:  {$regex: new RegExp(self.apos.utils.regExpQuote(req.query.search), 'i') }  }, 'public')

.perPage(self.perPage);

我正试图找出实施autocomplete

的方法

1 个答案:

答案 0 :(得分:1)

如你所知,我是P' unk Avenue的撇号团队负责人。

你的方式,方式,方式太难(:

为您的搜索字段命名"自动填充"在你的形式。

然后这样做:

var cursor = self.apos.docs.find(req, {})
  .queryToFilters(req.query, 'public')
  .perPage(self.perPage);
};

真的......那就是它。 queryToFilters的全部目的基本上就是这样做(不完整,请参阅下面的安全说明,了解它的真正含义):

// DON'T DO THIS, JUST GIVES YOU AN IDEA OF WHAT'S GOING ON
_.each(req.query, function(val, key) {
  cursor[key](val);
});

它调用与req.query的属性同名的游标方法(好吧,差不多)。

当然这是不安全的,但是queryToFilters专门确保有问题的方法是标记为safeFor: 'public'的游标过滤器并运行它们的消毒剂。

autocomplete就是这样一个光标过滤器,所以...热潮,我们已经完成了。

另外,我发现您正在与self.apos.docs.find直接合作。我假设您这样做是因为您希望所有类型的文档都从查询中返回,在这种情况下,您正在做正确的事情。

如果不清楚,如果您首先不使用查询字符串,则可以直接使用您拥有的任何内容直接调用autocomplete

cursor.autocomplete('startofaword');

希望这有用!