javascript - 如何搜索 FS 集合?

标签 javascript search meteor collectionfs

有人可以帮我解决这个问题吗?我有一组 PDF 文档,我希望能够搜索它们。 我尝试使用 matteodem:easy-search 和meteorhacks:search-source,但它们都只处理 Meteor Collections 而不是 FS。我可以让这两个包都使用常规文本。我只想根据 FS 集合中的名称字段返回搜索查询的结果。

任何帮助将不胜感激!

最佳答案

  1. 如果您还没有reactive-var 包,请安装reactive-dict 包(如果您还没有安装reactive-dict 包)
  2. 创建 react 变量(也可以是 Session 变量)searchString
  3. 将您的项目显示封装在 {{#each selectedFiles}} 中,其中 chosenFiles 是您的助手名称。
  4. 创建一个帮助器 chosenFiles,您可以在其中调用搜索函数并为其提供文件集合中的光标。

    "chosenFiles": function() {
        return filterFiles(yourFileCollection.find());
    }
    
  5. 创建 filterFiles 函数,基本上,您可以返回 searchString 并使用它来过滤结果,如果您的 searchString< 则返回所有内容 为空。这是一个使用reactive-dict的例子:

    var pageSession = new ReactiveDict();
    
     filterFiles= function(cursor) {
        if(!cursor) {
            return [];
        }
        var searchString = pageSession.get("SearchString");
        var raw = cursor.fetch();
    
        // filter
        var filtered = [];
        if(!searchString || searchString == "") {
            filtered = raw;
        } else {
            searchString = searchString.replace(".", "\\.");
            var regEx = new RegExp(searchString, "i");
            var searchFields = ["original.name", "original.type"];
            filtered = _.filter(raw, function(item) {
                var match = false;
                _.each(searchFields, function(field) {
                    var value = (getPropertyValue(field, item) || "") + "";
                    match = match || (value && value.match(regEx));
                    if(match) {
                        return false;
                    }
                })
                return match;
            });
        }
        return filtered;
    };
    
  6. 例如,将 searchString 定义附加到您的 keyUp 事件,以便获得响应式搜索。

    "keyup .yourTextBox": function(e, t) {
        var searchString = e.currentTarget.value;
        switch (e.which) {
            //pressing esc clear the textbox
            case 27:
            e.currentTarget.value = "";
            pageSession.set("SearchString", "");
            break;
    
            default:
            pageSession.set("SearchString", searchString);
    }
    

我不是 100% 确定“original.name”是访问名称字段的正确方法,因为我不使用 collectionFS,但似乎是,according to the doc

关于javascript - 如何搜索 FS 集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31946133/

相关文章:

postgresql - 使用 Postgresql 进行多语言全文搜索

mysql - 前缀匹配 MySQL 索引 : LIKE word% vs. MATCH 'word*' 用于搜索结果自动完成

javascript - meteor ,一对多关系&仅向发布中的客户端集合添加字段?

mongodb - 使用复选框过滤集合

javascript - AngularJS - 如何覆盖 $urlRouterProvider.when

javascript - 数据表下拉框

javascript - NodeJS 在运行时添加/删除/重新加载需要无需重新启动服务器(也不需要 nodemon)

java - Maven javadoc 搜索重定向到 "/undefined/.."url

javascript - 如何在 Meteor.js 中定义自定义模板助手来格式化输入的数据?

javascript - 如何确保 Node.JS 循环期间阻塞