使用方法名来构建查询,曾经一直使用的好好的,突然有发现查询出来的记录不符合了。怎么查询也只有10条匹配,突然想到可能ES查询引擎本身的限制,一查果然是。
https://knowledgebase.progress.com/articles/Article/ElasticSearch-returns-only-the-first-10-results
https://www.elastic.co/guide/en/elasticsearch/reference/6.3/search-request-from-size.html
意思说,如果不指定size,那么ES默认返回不超过10条数据,当指定SIZE时,最多也只能返回10000条数据。而看我构造的查询方法:
List<DecorationPageModule> findByPageKeyAndIfTempAndPlatformIdAndPositionGreaterThanEqual(String pageKey, String ifTemp, Integer platformId, Integer position, Pageable pageable);
当没有加红色部分时(旧代码),获得的查询语句没有生成SIZE参数,导致了默认10条返回的情况,而加上翻页后,指定100条数据,就不会发生这样的情况了
我也曾试图从参数调整的方式看看能否解决,但是除了最大数的限制可以通过index.max_rescore_window来调整,默认的最小10条似乎没有找到办法,只能在查询时,注意用分页参数来指定了。
这也是和数据库查询不一致的地方需要格外注意。