Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apostrophe cms 搜索部分字符串_Apostrophe Cms - Fatal编程技术网

Apostrophe cms 搜索部分字符串

Apostrophe cms 搜索部分字符串,apostrophe-cms,Apostrophe Cms,是否有一个设置(或代码段)可用于使用撇号搜索执行部分字符串匹配的搜索?例如:搜索“蓝色”应返回标题为“学习管理蓝图”的项目。看起来需要添加RegExp。如果其他任何人需要,以下是相关的lib\modules\撇号search\index.js代码: module.exports = { perPage: 15, construct: function(self, options) { self.indexPage = function(req, callback) {

是否有一个设置(或代码段)可用于使用撇号搜索执行部分字符串匹配的搜索?例如:搜索“蓝色”应返回标题为“学习管理蓝图”的项目。

看起来需要添加RegExp。如果其他任何人需要,以下是相关的lib\modules\撇号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';
                }
            );

看起来需要添加一个RegExp。如果其他任何人需要,以下是相关的lib\modules\撇号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';
                }
            );

如你所知,我是庞克大道撇号的首席开发者

您的解决方案确实有效,但是一个严重的问题是您没有逃避用户的输入,以防止像
*
这样的正则表达式元字符被解释为这样。为此,您可以使用
apos.utils.regExpQuote
,它返回包含通过
\
转义的危险字符的字符串

但是有一种更好的方法:只需使用
req.query.autocomplete
。撇号有一个内置的
自动完成
光标过滤器,其工作方式与
搜索
过滤器不同。
autocomplete
过滤器允许部分匹配(尽管只在单词的开头),然后它通过常规的
搜索
提供它找到的单词,因此结果仍然按匹配质量排序。它还保留了使用
搜索的大部分性能优势

像您这样的正则表达式搜索将扫描整个mongodb集合(至少是所有相关类型的文档),这意味着如果您有大量内容,您将遇到性能问题


autocomplete
的一个警告是,它只“看到”高优先级字段中的单词,如标题、标签等。它不会像正则表达式搜索(或
search
过滤器)那样看到文档的全文。这是保持性能的必要折衷。

正如您所知,我是蓬克大道撇号的首席开发人员

您的解决方案确实有效,但是一个严重的问题是您没有逃避用户的输入,以防止像
*
这样的正则表达式元字符被解释为这样。为此,您可以使用
apos.utils.regExpQuote
,它返回包含通过
\
转义的危险字符的字符串

但是有一种更好的方法:只需使用
req.query.autocomplete
。撇号有一个内置的
自动完成
光标过滤器,其工作方式与
搜索
过滤器不同。
autocomplete
过滤器允许部分匹配(尽管只在单词的开头),然后它通过常规的
搜索
提供它找到的单词,因此结果仍然按匹配质量排序。它还保留了使用
搜索的大部分性能优势

像您这样的正则表达式搜索将扫描整个mongodb集合(至少是所有相关类型的文档),这意味着如果您有大量内容,您将遇到性能问题


autocomplete
的一个警告是,它只“看到”高优先级字段中的单词,如标题、标签等。它不会像正则表达式搜索(或
search
过滤器)那样看到文档的全文。这是保持性能的必要折衷。

在我的测试中,搜索部分“blue”字符串是有效的:var cursor=self.apos.docs.find(req,{lowSearchText:/blue/}),但将其设为变量并不有效。这不应该是等效的吗?var searchText='蓝色';var cursor=self.apos.docs.find(req,{lowSearchText:searchText})在我的测试中,搜索部分“blue”字符串有效:var cursor=self.apos.docs.find(req,{lowSearchText:/blue/})但是把它变成一个变量并不是。这不应该是等效的吗?var searchText='蓝色';var cursor=self.apos.docs.find(req,{lowSearchText:searchText})