我有以下查询可与 Elasticsearch 一起使用。
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"script_score": {
"script": {
"source": "cosineSimilarity(params.query_vector, 'vector') + 1",
"params": {
"query_vector": [/* Your query vector here */]
}
}
}
}
}
}
我正在尝试使用新的 Java API 将此查询转换为 kotlin。不幸的是,我无法找到有关如何转换此查询的文档。我尝试了多种方法但没有效果。
我已从 chatGPT 尝试了以下操作,但无法使其正常工作。
fun main() {
val queryVector = /* Your query vector here */
val scriptScoreFunction = ScriptScoreFunction(
Script("painless", "cosineSimilarity(params.query_vector, 'vector') + 1"),
mapOf("query_vector" to queryVector)
)
val functionScoreQuery = FunctionScoreQuery(
MatchAllQuery(),
listOf(ScriptScoreFunctionBuilder(scriptScoreFunction))
).scoreMode(ScoreMode.SUM)
val searchRequest = SearchRequest(Index("_all")).apply {
source(SearchSourceBuilder().apply {
query(functionScoreQuery)
})
}
println(searchRequest.source().toString())
}
大多数资源也在使用旧的elasticsearch库,但我必须使用co.elastic.clients 这是最新的 java api 库
经过一番尝试和错误,我发现使用 latest Java Elasticsearch API ,代码将如下所示:
val scriptBuidler = ScriptBuilders.inline()
.source(cosineSimilarity(params.query_vector, 'vector') + 1)
.params("queryVector", Jsondata.of("[1.0, 2.0]"))
.build()
SearchRequest.Builder()
.index("name_of_index")
.size(3)
.minscore(0.01)
.query(
ScriptScoreQuery.Builder()
.query(hshs)
.script(
ScriptBuilder().inline(scriptBuilder).build()
)
.build()
._toQuery()
)
.source(
SourceConfig.Builder().build()
)
.build()