MongoDB 无法规范化查询:BadValue 文本表达式太多

2024-02-16

我正在尝试用 Java 构建 MongoDB 查询,但每当运行查询时,都会遇到此错误:“无法规范化查询:BadValue 文本表达式太多”。

该数据库充满了具有文本属性的文档,这些文档已建立索引以进行全文搜索。我正在尝试构建一个查询来查找与 queryList 中的一个或多个查询匹配并且在特定时间范围内的任何文档。如果查询列表中只有一个查询,则它可以正常工作,否则会失败。

有任何想法吗?

BasicDBList queryList = new BasicDBList();

for(String queryString : queryStrings)
{
    queryList.add(new BasicDBObject("$text", new BasicDBObject("$search", queryString)));
}

BasicDBObject queries = new BasicDBObject("$or", queryList);

DBObject query =  QueryBuilder.start()
    .and(endpointQuery,
         QueryBuilder.start().put("time").greaterThan(minTime).get(),
         QueryBuilder.start().put("time").lessThan(maxTime).get())
    .get();

DBCursor cursor = tweets.find(query);

该错误非常准确。您想要做的是在一个内部创建“多个文本查询”$or http://docs.mongodb.org/manual/reference/operator/query/or/健康)状况。 MongoDB 无法做到这一点,事实上它在第一行中已说明限制 http://docs.mongodb.org/manual/reference/operator/query/text/#restrictions在手册页中$text http://docs.mongodb.org/manual/reference/operator/query/text/.

而且,你不是supposed这样做,而是指定one如果需要,集合上的文本索引可在多个字段中搜索:

db.collection.ensureIndex({ "comments": "text", "title": "text" })

然后你可能想要分配权重如图所示 http://docs.mongodb.org/manual/tutorial/control-results-of-text-search/.

但似乎您真正要求的只是搜索“多个术语”。所以你不使用$or为此,只需提交以空格分隔的术语列表:

db.collection.find({ "$text": { "$search": "something else" } })

然后,在文本索引中的任何字段的上下文中搜索空格分隔列表中的任何单词,并且将返回包含“任何”这些单词的任何文档。结果按该列表中单词的更多匹配项的“权重”排序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 无法规范化查询:BadValue 文本表达式太多 的相关文章

随机推荐