thr*_*xst 2 full-text-search mongodb mongodb-query
我试图在Java中构建MongoDB的查询,并且每当我运行查询时,我都会遇到此错误,"无法规范化查询:BadValue太多文本表达式".
数据库中包含一个文本属性的文档,该文本属性被编入索引以进行全文搜索.我正在尝试构建一个查询来查找与queryList中的一个或多个查询匹配且在特定时间范围内的任何文档.如果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);
Run Code Online (Sandbox Code Playgroud)
错误很准确.您要做的是在$or条件中创建"多个文本查询" .MongoDB不能这样做,事实上它在手册页的第一行限制中说明了$text.
此外,您不应该这样做,而是在您的集合上指定一个文本索引,以便在需要时搜索多个字段:
db.collection.ensureIndex({ "comments": "text", "title": "text" })
Run Code Online (Sandbox Code Playgroud)
然后你可能想要分配权重,如下所示.
但似乎你真正要求的是搜索"多个术语".所以你不要使用$orfor,但只提交用空格分隔的术语列表:
db.collection.find({ "$text": { "$search": "something else" } })
Run Code Online (Sandbox Code Playgroud)
然后,在文本索引内的任何字段的上下文中搜索空格分隔列表中的任何单词,并且将返回包含"任何"这些单词的任何文档.结果按"重量"排序,列表中的单词匹配更多.
| 归档时间: |
|
| 查看次数: |
1472 次 |
| 最近记录: |