我正在使用MongoDB的Atlas Search $search
聚合管道阶段。我遇到以下错误:Remote error from mongot :: caused by :: query has expanded into too many sub-queries internally: maxClauseCount is set to 1024
个
这似乎是因为Lucene的[maxClauseCount][1]变量的默认值设置为1024。
下面是我的代码:
const { Restaurant } = require('../models');
Restaurant.aggregate({
$search: {
index: 'default',
compound: {
should: {
{
autocomplete: {
query: filter.searchText,
path: 'name',
},
}
..._.map(mealMatchedRestaurantIds, (id) => {
return {
equals: {
path: '_id',
value: mongoose.Types.ObjectId(id),
},
}
})
},
minimumShouldMatch = 1;
}
}
});
我正在从mealMatchedRestaurantIds
数组动态生成'equals'子句。该数组的长度超过了1024,这将导致maxClauseCount
值被超过。[1]:https://github.com/apache/lucene/search?q=maxClauseCount
MongoDB是否提供了API来覆盖这个变量的值?或者有没有更好的方法来设计这个搜索查询(而不是将它分块成多个查询)?
1条答案
按热度按时间yqkkidmi1#
如果你在一个复合查询中有超过1024个词,这是一个lucene布尔查询,你需要寻找一个不同的查询。如果
searchTerm
可以小于1024个词,你会没事的。