小编Jay*_*ard的帖子

Elasticsearch:过滤器顺序以获得最佳性能

Elasticsearch指南说

"每个过滤器都是独立计算和缓存的,无论它在何处使用.如果两个不同的查询使用相同的过滤器,则将重用相同的过滤器位集.同样,如果单个查询在多个位置使用相同的过滤器,则只有一个位集计算然后重复使用." (https://www.elastic.co/guide/en/elasticsearch/guide/current/filter-caching.html)

在另一页上它还说:

"bool子句中的过滤器顺序对于性能很重要.更具体的过滤器应该放在不太具体的过滤器之前,以尽可能多地排除尽可能多的文档.如果条款A可以匹配1000万个文档,条款B只能匹配100份文件,则条款B应放在条款A之前." (https://www.elastic.co/guide/en/elasticsearch/guide/current/_filter_order.html)

我不太明白当每个过滤器独立缓存时,bool子句中的过滤器顺序是如何重要的.

我认为从缓存执行或检索子句B,从缓存执行或检索子句A,然后过滤器位集"合并".为什么订单很重要?

performance elasticsearch

8
推荐指数
2
解决办法
4967
查看次数

杰克逊无法在Android上加载JDK7类型

我在我的Android应用程序中使用Jackson 2.8.2来反序列化JSON.反序列化本身可行,但是,我可以在应用程序日志中看到以下警告:

Unable to load JDK7 types (annotations, java.nio.file.Path): no Java7 support added
Run Code Online (Sandbox Code Playgroud)

Proguard被禁用,sourceCompatibility设置为'1.7'.如何在构建中添加这些看似缺失的类型?

java android jackson java-7 kotlin

8
推荐指数
1
解决办法
9783
查看次数

Kotlin KDoc:文档?

这里看到,这里那里引用了KDoc,它是Kotlin的JavaDoc实用程序.

但是,我找不到任何关于如何使用它的文档,更不用说如何自定义它或将它集成到Maven或Gradle中.

我知道Kotlin API文档是使用KDoc生成的,因为页面源具有以下HTML注释:<!-- Generated by kdoc on Sun Jul 06 20:27:33 UTC 2014 -->

那么,有没有关于如何使用KDoc的文档?

kotlin kdoc kotlin-dokka

7
推荐指数
1
解决办法
4113
查看次数

Kotlin - 使用格式化日期字符串排序列表(功能)

我正在尝试创建一个Kotlin REST API,它从PostgreSQL数据库中检索值.现在这些结果中的值是fe "14-10-2016 | 15:48","01-08-2015 | 09:29"所以语法基本上是dd-MM-yyyy | hh:mm

现在我要做的是创建一个函数,按日期排序.(假设这些字符串在一个数组中)

var list = listOf("14-10-2016 | 15:48",
                  "01-08-2015 | 09:29",
                  "15-11-2016 | 19:43")
Run Code Online (Sandbox Code Playgroud)

排序这些最干净(最实用)的方法是什么?(所以fe有一种方法,我不必采取当天,月等的子串,将它们转换为a Int,在嵌套循环中比较它们并将结果写入不同的数组?(这是我唯一的方法可以想到).

sorting date kotlin

7
推荐指数
1
解决办法
9608
查看次数

从ResultSet生成列表

我不完全确定这是可能的,我绝对不知道要搜索什么或如何简明扼要地解释它,但这似乎是一个很好的事情,如果可能的话我不会感到惊讶.

我想实例化一个列表,listOf()但不是提供列表的元素,而是提供一些代码来生成列表的元素.

例如,使用ResultSet :(这不是有效代码)

val list: List<Int> = listOf(
    while(resultSet.next()){
        return resultSet.getInt(1)
    }
)
Run Code Online (Sandbox Code Playgroud)

这样的事情可能吗?

jdbc kotlin

7
推荐指数
1
解决办法
1765
查看次数

我无法获取 JDBC 连接异常

我正在运行一个带有 hibernate 和 spring-data 的 spring-boot 应用程序。二、有以下方法:

@Service
class SomeService(private val repository : SomeRepository){

  fun someEndPoint(request: Request, Id: Long): UUID? {

      return try {

          val enNumber = repository.callEncrypt(request.accountNumber)

          val entity = SomeEntity().apply{
            this.id = Id
            this.enNumber = enNumber
          }

          repository.save(entity)


      } catch (e: Exception) {
          LOGGER.error("someEndPoint",e)
          throw e
      }
  }

}
Run Code Online (Sandbox Code Playgroud)

当我第四次运行此方法时,出现无法获取 JDBC 连接异常。我怀疑当我调用存储过程“callEncrypt”时,hibernate 不会在工作完成后释放连接,因为如果我删除该行,应用程序运行良好,由于 hibernate 正在处理事务,因此无法手动关闭连接(并且没有理由这样做),所以我已经坚持了一段时间,我不知道会发生什么。

奇怪的是,当我使用 sp_who 过程在 sql server 中查找活动连接时,没有活动连接,我现在唯一的解决方案是重新启动应用程序。如果我重新启动应用程序一切正常,直到我再次运行这个函数第四次,所以很明显 hibernate 永远不会释放连接。

这是完整的堆栈跟踪:

org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Unable …
Run Code Online (Sandbox Code Playgroud)

spring hibernate spring-data-jpa kotlin

7
推荐指数
1
解决办法
2万
查看次数

是否可以将 lambda 传递给 Intent?

我想知道是否可以将 lambda 传递给 kotlin 中的 Intent,因为 lambda 是可序列化的,但是使用这段代码,我在创建 PendingIntent 时遇到错误。

val bundle = bundleOf(ACTION to { pause() })
val playButtonIntent = Intent(this, MusicService::class.java).apply {
        putExtras(bundle)
}
val pendingPlayIntent = PendingIntent.getService(this, 1, playButtonIntent, 0)
Run Code Online (Sandbox Code Playgroud)

错误:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object
Run Code Online (Sandbox Code Playgroud)

lambda serialization android kotlin

7
推荐指数
1
解决办法
5038
查看次数

在哪里/如何为Kotlin包添加文档?

在Java中,如果要记录包,则必须将其放入package-info.class文件中.对于Kotlin和KDoc来说,这仍然是一回事吗?我查看了一些Kotlin源代码,无法找到编写包文档的位置.

documentation package kotlin kdoc kotlin-dokka

6
推荐指数
1
解决办法
1097
查看次数

在Kotlin,我可以覆盖一些现有的运营商,但是如何创建新的运营商呢?

在Kotlin中,我看到我可以覆盖一些运算符,例如+通过函数plus()*函数times()...但是对于像集合这样的东西,首选(集合论)符号/运算符不存在.例如A?B,交集和A?B联合.

我似乎无法定义自己的运算符,没有明确的语法来说明用于运算符的符号.例如,如果我想$$为运算符创建一个函数:

operator fun String.$$(other: String) = "$this !!whatever!! $other"
// or even
operator fun String.whatever(other: String) = "$this !!whatever!! $other" // how do I say this is the $$ symbol?!?
Run Code Online (Sandbox Code Playgroud)

我得到两个相同的错误:

错误:(y,x)Kotlin:'operator'修饰符不适用于此函数:非法函数名称

可以创建或覆盖运营商的规则是什么?

注意: 这个问题是由作者故意编写和回答的(答案问题),因此对于常见问题的Kotlin主题的惯用答案存在于SO中.

operator-overloading kotlin

6
推荐指数
1
解决办法
2694
查看次数

在Kotlin中,如何针对不同的设置分支限制流畅的Builder中的选择

在Kotlin,我正在编写一个构建器,并且需要一系列明显且必须完成的步骤.使用流畅的构建器,我可以显示所有步骤,但不能确定它们必须发生的顺序,也不能根据上一步更改哪些步骤可用.所以:

serverBuilder().withHost("localhost")
         .withPort(8080)
         .withContext("/something")
         .build()
Run Code Online (Sandbox Code Playgroud)

很好,但随后添加SSL证书等选项:

serverBuilder().withHost("localhost")
         .withSsl()
         .withKeystore("mystore.kstore")
         .withContext("/secured")
         .build()
Run Code Online (Sandbox Code Playgroud)

现在没有什么能阻止非ssl版本拥有withKeystore和其他选项.在没有首先打开的情况下调用此SSL方法时应该出错withSsl():

serverBuilder().withHost("localhost")
         .withPort(8080)
         .withContext("/something")
         .withKeystore("mystore.kstore")   <------ SHOULD BE ERROR!
         .build()
Run Code Online (Sandbox Code Playgroud)

在路上有更多的叉子可能会更复杂,我只想要一些物品而不是其他物品.

如何限制构建器逻辑中每个分支可用的功能?这对建筑商来说是不可能的,而应该是DSL吗?

注意: 这个问题是由作者故意编写和回答的(答案问题),因此对于常见问题的Kotlin主题的惯用答案存在于SO中.

kotlin

6
推荐指数
1
解决办法
203
查看次数