コード例 #1
0
        it('verify creating a resource filter', function(callback) {
            // Ensure unspecified resource types searches all undeleted resources
            var filterUnspecifiedResources = SearchUtil.filterResources();
            assert.strictEqual(filterUnspecifiedResources.and.length, 2);
            assert.strictEqual(filterUnspecifiedResources.and[0].term._type, 'resource');
            assert.strictEqual(filterUnspecifiedResources.and[1].not.exists.field, 'deleted');

            // Ensure empty resource types searches all
            var filterEmptyResources = SearchUtil.filterResources([]);
            assert.strictEqual(filterEmptyResources.and.length, 2);
            assert.strictEqual(filterEmptyResources.and[0].term._type, 'resource');
            assert.strictEqual(filterEmptyResources.and[1].not.exists.field, 'deleted');

            // Sanity check with one resource type
            var filterOneResource = SearchUtil.filterResources(['content']);
            assert.strictEqual(filterOneResource.and.length, 3);
            assert.strictEqual(filterOneResource.and[0].term._type, 'resource');
            assert.strictEqual(filterOneResource.and[1].terms.resourceType[0], 'content');
            assert.strictEqual(filterOneResource.and[2].not.exists.field, 'deleted');

            var filterAllDeletedResources = SearchUtil.filterResources(null, SearchConstants.deleted.ONLY);
            assert.strictEqual(filterAllDeletedResources.and.length, 2);
            assert.strictEqual(filterAllDeletedResources.and[0].term._type, 'resource');
            assert.strictEqual(filterAllDeletedResources.and[1].exists.field, 'deleted');

            var filterAllDeletedAndExistingResources = SearchUtil.filterResources(null, SearchConstants.deleted.BOTH);
            assert.strictEqual(filterAllDeletedAndExistingResources.term._type, 'resource');

            return callback();
        });
コード例 #2
0
ファイル: general.js プロジェクト: Orodan/Hilary-jitsi-fork
var _search = function(ctx, opts, callback) {
    // The query and filter objects for the Query DSL
    var query = _createQuery(ctx, opts);
    var filterResources = SearchUtil.filterResources(opts.resourceTypes);
    SearchUtil.filterScopeAndAccess(ctx, opts.scope, _needsFilterByExplicitAccess(ctx, opts), function(err, filterScopeAndAccess) {
        if (err) {
            return callback(err);
        }

        // Create the filtered query
        var filter = SearchUtil.filterAnd(filterResources, filterScopeAndAccess);
        var filteredQuery = SearchUtil.createFilteredQuery(query, filter);

        // Give results from the current tenant a slight boost
        var boostingQuery = {
            'function_score': {
                'score_mode': 'sum',
                'boost_mode': 'sum',
                'functions': [{
                    'filter': {
                        'term': {
                            'tenantAlias': ctx.tenant().alias
                        }
                    },
                    'boost_factor': 1.5
                }],
                'query': filteredQuery
            }
        };

        // Wrap the query and filter into the top-level Query DSL "query" object
        return callback(null, SearchUtil.createQuery(boostingQuery, null, opts));
    });
};
コード例 #3
0
ファイル: email.js プロジェクト: mrvisser/Hilary
module.exports = function(ctx, opts, callback) {
    // Sanitize custom search options
    opts = opts || {};
    opts.limit = OaeUtil.getNumberParam(opts.limit, 10, 1, 25);

    var validator = new Validator();
    validator.check(null, {'code': 401, 'msg': 'Only authenticated users can use email search'}).isLoggedInUser(ctx);
    validator.check(opts.q, {'code': 400, 'msg': 'An invalid email address has been specified'}).isEmail();
    if (validator.hasErrors()) {
        return callback(validator.getFirstError());
    }

    // Ensure the email address being searched is lower case so it is case insensitive
    var email = opts.q.toLowerCase();

    var filterResources = SearchUtil.filterResources(['user']);
    var filterInteractingTenants = SearchUtil.filterInteractingTenants(ctx.user().tenant.alias);

    // When searching for users by email, we can ignore profile visibility in lieu of an email
    // exact match. The user profile is still "scrubbed" of private information on its way out,
    // however we enable the ability for a user to share with that profile if they know the email
    // address
    var query = SearchUtil.createEmailQuery(email);
    var queryOpts = _.extend({}, opts, {'minScore': 0});
    var filter = SearchUtil.filterAnd(filterResources, filterInteractingTenants);
    return callback(null, SearchUtil.createQuery(query, filter, queryOpts));
};
コード例 #4
0
        it('verify creating a resource filter', function(callback) {
            // Ensure unspecified resource types searches all
            var filterUnspecifiedResources = SearchUtil.filterResources();
            assert.ok(filterUnspecifiedResources.term);
            assert.equal(filterUnspecifiedResources.term._type, 'resource');

            // Ensure empty resource types searches all
            var filterEmptyResources = SearchUtil.filterResources([]);
            assert.ok(filterUnspecifiedResources.term);
            assert.equal(filterUnspecifiedResources.term._type, 'resource');

            // Sanity check with one resource type
            var filterOneResource = SearchUtil.filterResources(['content']);
            assert.ok(filterOneResource.and);
            assert.equal(filterOneResource.and[0].term._type, 'resource');
            assert.equal(filterOneResource.and[1].terms.resourceType[0], 'content');

            return callback();
        });
コード例 #5
0
ファイル: followers.js プロジェクト: Orodan/Hilary-jitsi-fork
var _search = function(ctx, opts, callback) {
    // The query object for the Query DSL
    var query = SearchUtil.createQueryStringQuery(opts.q);

    // The filter object for the Query DSL
    var filter = SearchUtil.filterAnd(
        SearchUtil.filterResources(['user']),
        SearchUtil.createHasChildQuery(FollowingConstants.search.MAPPING_RESOURCE_FOLLOWING, SearchUtil.filterTerms('following', [opts.userId]))
    );

    // Wrap the query and filter into the top-level Query DSL "query" object and return it
    return callback(null, SearchUtil.createQuery(query, filter, opts));
};
コード例 #6
0
ファイル: general.js プロジェクト: madwill/Hilary
var _search = function(ctx, opts, callback) {
    // The query and filter objects for the Query DSL
    var query = _createQuery(ctx, opts);
    var filterResources = SearchUtil.filterResources(opts.resourceTypes);

    SearchUtil.filterScopeAndAccess(ctx, opts.scope, _needsFilterByExplicitAccess(ctx, opts), function(err, filterScopeAndAccess) {
        if (err) {
            return callback(err);
        }

        var filter = SearchUtil.filterAnd(filterResources, filterScopeAndAccess);

        // Wrap the query and filter into the top-level Query DSL "query" object
        return callback(null, SearchUtil.createQuery(query, filter, opts));
    });
};