MarkLogic Node.js&引用;或;查询不起作用

MarkLogic Node.js&引用;或;查询不起作用,marklogic,Marklogic,我有两个范围索引,我试图在或“查询下运行,该查询执行通配符搜索。但它并没有返回结果 不起作用。下面的查询返回空数组: db.documents.query(qb.where( qb.or( qb.word(qb.range('informationProviderName'), 'a*'), qb.word(qb.range('functionalName'), 'a*') )).withO

我有两个范围索引,我试图在或“查询下运行,该查询执行通配符搜索。但它并没有返回结果

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

 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);
    });
但是当我单独执行查询时,它会返回结果

有效:

 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);
    });
有效:

 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*')
    ));

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


另外需要注意的是,您需要检查数据库上的以下索引,以确保它们已启用:“三字符搜索”、“快速元素字符搜索”、“一字符搜索”和“两字符搜索”。您会注意到,每个“较慢的文档加载和较大的数据库文件”都有一个相关的警告。根据您的需要,您可以决定“三字符搜索”是您所需要的,您只需等待至少有三个字符发送到查询。

我甚至无法执行简单的“或”查询它不会返回结果。