java SpringBoot ElasticsearchRepository:search_context_missing_exception

ljo96ir5  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(87)

假设我们在SpringBoot应用程序中有这个ElasticsearchRepository:

interface TransactionsRepository extends ElasticsearchRepository<Transaction, String> {
    Stream<Transaction> findAllBySomething(String something);
}

字符串
如果我有太多的记录在105秒后提取,调用失败,错误:
Exception.js [type=search_context_missing_exception,reason=No search context found for id [44763]] Blockquote关键字:
我需要配置什么来增加滚动API的时间,这样我就不会再得到这个错误了?或者当你有> 10,000条记录要获取时,有什么解决方案?
我不知道这是否在application.properties中设置正确:

spring.jpa.properties.hibernate.jdbc.batch_size=100
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true
spring.jpa.properties.hibernate.jdbc.fetch_size=400

f87krz0w

f87krz0w1#

105秒的超时时间已经足够了,你不应该需要改变它。
如果你没有在这段时间内得到搜索结果,检查你的搜索列是否被正确索引。
此外,检查要搜索的列是否具有正确的数据类型。例如,Text数据类型允许您在索引该列之前拆分单词。https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html
如果默认的文本分析器不合适,您甚至可以调整文本分析器。https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html
您也可以索引但不存储某些长列。这些列将用于搜索,但不会显示在搜索结果中。
为了进一步讨论,您需要共享您的文档结构(包括这些列的存储和/或索引位置)。
另一种可能的加速是只返回搜索结果中所需的列。默认情况下,它将返回所有列,如果某些列很长,则会花费时间。如果您需要获取所有记录,即使有很多记录,最小化这也会对您有所帮助。
另一种可能的加速方法是对搜索结果进行分页。与其将所有记录放在一起,不如考虑一次获得X个结果,其中X可以配置为一次获得10/20/50/100/200/500个结果。
你提到的属性与hibernate有关,我认为它们可能对你在elasticsearch中没有帮助。

相关问题