我是否可以使用设置(或代码段)来使用撇号搜索执行部分字符串匹配搜索?例如:搜索“blue”应返回标题为“Learning Management Blueprint”的项目。
答案 0 :(得分:0)
看起来需要添加一个RegExp。如果其他人需要这个,这里是相关的lib \ modules \ _撇号 - 搜索\ index.js代码:
module.exports = {
perPage: 15,
construct: function(self, options) {
self.indexPage = function(req, callback) {
req.query.search = req.query.search || req.query.q;
var allowedTypes;
var defaultingToAll = false;
var cursor = self.apos.docs.find(req, { lowSearchText: new RegExp(req.query.search, 'i') } )
.perPage(self.perPage);
if (self.filters) {
var filterTypes = _.filter(
_.pluck(self.filters, 'name'),
function(name) {
return name !== '__else';
}
);
答案 1 :(得分:0)
如您所知,我是P' unk Avenue的Apostrophe的首席开发人员。
您的解决方案确实有效,但是一个严重的问题是您没有逃避用户的输入,以防止将.
和*
等正则表达式元字符解释为这样。为此,您可以使用apos.utils.regExpQuote(s)
,它返回带有通过\
转义的危险字符的字符串。
有一种更好的方法:只需使用req.query.autocomplete
。 Apostrophe有一个内置的autocomplete
光标过滤器,其工作方式与search
过滤器不同。 autocomplete
过滤器允许部分匹配(尽管仅在单词的开头),然后它通过常规search
提供它找到的单词,以便结果仍按匹配质量排序。它还保留了使用search
的大部分性能优势。
像你这样的正则表达式搜索会扫描整个mongodb集合(至少是所有相关类型的文档),这意味着如果你有很多内容,你会遇到性能问题。
autocomplete
的一个警告是,它只会"看到"高优先级字段中的单词,如标题,标签等。它没有像正则表达式搜索(或search
过滤器)那样查看文档的全文。这是保持绩效提升的必要权衡。