gpt4 book ai didi

java - 找出与自定义评分脚本中的术语匹配的字段

转载 作者:行者123 更新时间:2023-12-01 14:48:25 25 4
gpt4 key购买 nike

我正在使用带有 multiMatchQuery 的自定义分数查询。最终我想要的很简单,不需要太多解释。在我的 Java 自定义评分脚本中,我希望能够找出结果与哪个字段匹配。

示例:

如果我搜索星巴克并且返回的结果带有名称星巴克,那么我希望能够知道 name.basic 是与我的查询匹配的字段。如果我搜索咖啡并且星巴克回来了,我希望能够知道标签是匹配的字段。

有办法做到这一点吗?

搜索查询代码:

def basicSearchableSearch(t: String, lat: Double, lon: Double, r: Double, z: Int, bb: BoundingBox, max: Int): SearchResponse = {
val multiQuery = filteredQuery(
multiMatchQuery(t)
//Matches businesses and POIs
.field("name.basic").operator(Operator.OR)
.field("name.no_space")
//Businesses only
.field("tags").boost(6f),
geoBoundingBoxFilter("location")
.bottomRight(bb.botRight.y,bb.botRight.x)
.topLeft(bb.topLeft.y,bb.topLeft.x)
)

val customQuery = customScoreQuery(
multiQuery
)
.script("customJavaScript")
.lang("native")
.param("lat",lat)
.param("lon",lon)
.param("zoom",z)

global.Global.getClient().prepareSearch("searchable")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(customQuery)
.setFrom(0).setSize(max)
.execute()
.actionGet();
}

最佳答案

它仅适用于简单查询。在复杂的查询中,哪个字段匹配的问题实际上非常重要。所以,我想不出任何有效的方法来做到这一点。

也许,您可以考虑将自定义得分计算移至更接近比赛的位置。 multi_match查询基本上是一组 match 的快捷方式对由 dis_max 组合的同一查询字符串进行查询询问。所以,您目前正在构建这样的东西:

custom_score(
filtered(
dis_max(match_1, match_2, match_3)
)
)

您可以做的是将您的 custom_score 移至 dis_max 下并构建如下内容:

filtered(
dis_max(
custom_score_1(match_1),
custom_score_2(match_2),
custom_score_3(match_3)
)
)

显然,这将是一个有些不同的查询,因为 dis_max 将根据自定义分数而不是原始分数进行操作。

关于java - 找出与自定义评分脚本中的术语匹配的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15146815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com