MarkLogic Node.js. “或”查询不起作用

时间:2015-05-20 14:59:59

标签: marklogic

我有两个范围索引,我正在尝试在“OR”查询下运行,这会进行外卡搜索。但它没有返回结果。

不起作用。以下查询返回空数组:

 db.documents.query(qb.where(
            qb.or(
                qb.word(qb.range('informationProviderName'), 'a*'),
                qb.word(qb.range('functionalName'), 'a*')
        )).withOptions({ categories: ['metadata'] })
        ) 
        .result(function (documents) {
            res.json(documents);
        }, function (error) {
            console.dir(error);
        });

但是当我单独执行查询时,它会返回结果。

使用:

  db.documents.query(qb.where(
                qb.word(qb.range('informationProviderName'), 'a*')
            ).withOptions({ categories: ['metadata'] })
        )
        .result(function (documents) {
            res.json(documents);
        }, function (error) {
            console.dir(error);
        });

使用:

db.documents.query(qb.where(
            qb.word(qb.range('functionalName'), 'a*')
        ).withOptions({ categories: ['metadata'] })
    )
    .result(function (documents) {
        res.json(documents);
    }, function (error) {
        console.dir(error);
    });

请帮帮忙?

正确答案:根据评论:

return qb.where(qb.or(
        qb.word(qb.field('productName'), 'a*'),
            qb.word(qb.field('manufacturerName'), 'a*')
    ));

1 个答案:

答案 0 :(得分:2)

有很多事情需要关注。首先,QueryBuilder.word函数采用字符串或IndexedName(类似于从QueryBuilder.element或QueryBuilder.property返回的内容)。您正在传递QueryBuilder.range,它返回Query类型,而不是IndexedName类型。

其他一些需要注意的事项是,您要检查数据库中的以下索引以确保它们已启用:"三个字符搜索","快速元素字符搜索& #34;,"一个字符搜索","两个字符搜索"。您会注意到每个"较慢的文档加载和较大的数据库文件都会出现警告。"根据您的需要,您可以决定"三个字符搜索"就是你所需要的,而且你只需等到至少有三个字符发送到查询。