java中mongodb正则表达式文本的慢速查询

0lvr5msh  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(372)

在mongodb中搜索正则表达式文本时,一开始速度很慢,所以我想知道原因。
只有在java应用服务器上才能找到相应的慢查询。
当在mongodbshell中运行相应的查询时,它的工作速度非常快(索引工作得很好)。
上述查询中的数据结果值的数目是5。收集的数据总数为45万
下面是一个特定于流程的查询。
=======java进程=====(非常慢5518ms)

public List<Contents> findContentList(int rowCnt, long rowNo, String searchContent){
        Query query = new Query();
        query.addCriteria((Criteria.where(DictionaryKey.content).regex("^" + searchContent)));
        if (rowNo > 0) query.addCriteria(Criteria.where(DictionaryKey.contentSeq).gt(rowNo));
        query.with(new Sort(Sort.Direction.ASC, DictionaryKey.contentSeq));
        query.limit(rowCnt);

        return this.mongoTemplate.find(query, Contents.class, Constant.CollectionName.Contents);

}

java监控工具

Query : Query: { "content" : { "$regex" : "^abcd"}}, Sort: { "contentSeq" : 1}
    Collection Name : contents
    MongTemplate#find() [5,518ms] -- org.springframework.data.mongodb.core.mongTemplate.find()Ljava/util/List;

=======mongodb shell=====mongodb查询(非常快,索引工作正常)

db.contents.found ({content:{"$regex" : "^abcd"}}).sort ({"contentSeq" : 1});

“contents”集合索引无效 content_1_contentSeq_1 请帮帮我。

km0tfn4u

km0tfn4u1#

我找到了原因
原因是某些查询使用了错误的索引。
解决方法是通过给出提示来强制使用索引。

相关问题