搜索部分字符串
Search for partial strings
是否有设置(或片段)可用于使用 apostrophe-search 执行部分字符串匹配搜索?例如:搜索 "blue" 应该 return 标题为 "Learning Management Blueprint" 的项目。
看来需要添加 RegExp。如果其他人需要这个,这里是相关的 lib\modules\apostrophe-search\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';
}
);
如你所知,我是 P'unk Avenue 的 Apostrophe 的首席开发人员。
您的解决方案确实有效,但是一个严重的问题是您没有转义用户的输入以防止像 .
和 *
这样的正则表达式 meta-characters 被解释为这样的。为此,您可以使用 apos.utils.regExpQuote(s)
,其中 returns 带有通过 \
.
转义的危险字符的字符串
虽然有更好的方法来做到这一点:只需使用 req.query.autocomplete
即可。撇号有一个 built-in autocomplete
游标过滤器,其工作方式与 search
过滤器不同。 autocomplete
过滤器允许部分匹配(虽然只在单词的开头),然后它通过常规 search
提供它找到的单词,以便结果仍然按匹配质量排序。它还保留了使用 search
.
的大部分性能优势
像您这样的正则表达式搜索将扫描整个 mongodb collection(好吧,至少是相关类型的所有文档),这意味着如果您有内容很多。
关于 autocomplete
的一个警告是,它在 high-priority 字段(如标题、标签等)中只有 "sees" 个单词。它不会像您的方式那样查看文档的全文正则表达式搜索(或 search
过滤器)可以。这是保持性能的必要权衡。
是否有设置(或片段)可用于使用 apostrophe-search 执行部分字符串匹配搜索?例如:搜索 "blue" 应该 return 标题为 "Learning Management Blueprint" 的项目。
看来需要添加 RegExp。如果其他人需要这个,这里是相关的 lib\modules\apostrophe-search\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';
}
);
如你所知,我是 P'unk Avenue 的 Apostrophe 的首席开发人员。
您的解决方案确实有效,但是一个严重的问题是您没有转义用户的输入以防止像 .
和 *
这样的正则表达式 meta-characters 被解释为这样的。为此,您可以使用 apos.utils.regExpQuote(s)
,其中 returns 带有通过 \
.
虽然有更好的方法来做到这一点:只需使用 req.query.autocomplete
即可。撇号有一个 built-in autocomplete
游标过滤器,其工作方式与 search
过滤器不同。 autocomplete
过滤器允许部分匹配(虽然只在单词的开头),然后它通过常规 search
提供它找到的单词,以便结果仍然按匹配质量排序。它还保留了使用 search
.
像您这样的正则表达式搜索将扫描整个 mongodb collection(好吧,至少是相关类型的所有文档),这意味着如果您有内容很多。
关于 autocomplete
的一个警告是,它在 high-priority 字段(如标题、标签等)中只有 "sees" 个单词。它不会像您的方式那样查看文档的全文正则表达式搜索(或 search
过滤器)可以。这是保持性能的必要权衡。