我知道,弹性查询在计算查询检索的文档分数时会考虑字段的长度。字段越短,权重越高(请参见字段长度范数)。
我喜欢这种行为:当我搜索iphone
我在更感兴趣iphone 6
比Crappy accessories for: iphone 5 iphone 5s iphone 6
。
现在,我想尝试增强这些功能,比方说,我想使其重要性加倍。
我知道可以使用功能分数来修改分数,并且我想我可以通过脚本分数来实现我想要的。
我试图像这样向得分添加另一个字段长度范数:
{
"query": {
"function_score": {
"boost_mode": "replace",
"query": {...},
"script_score": {
"script": "_score + norm(doc)"
}
}
}
}
但是我失败很严重,得到了这个错误: [No parser for element [function_score]]
编辑:
我的第一个错误是我没有将功能分数包装在“查询”中。现在,我编辑了上面的代码。我的新错误说
GroovyScriptExecutionException[MissingMethodException
[No signature of method: Script5.norm() is applicable for argument types:
(org.elasticsearch.search.lookup.DocLookup) values:
[<org.elasticsearch.search.lookup.DocLookup@2c935f6f>]
Possible solutions: notify(), wait(), run(), run(), dump(), any()]]
编辑:我提供了第一个答案,但我希望有一个更好的答案
它看起来像你可以做到这一点使用的字段类型token_count
连同field_value_factor
功能评分。
因此,在字段映射中类似以下内容:
"name": {
"type": "string",
"fields": {
"length": {
"type": "token_count",
"analyzer": "standard"
}
}
}
这将使用该字段中的令牌数。如果要使用字符数,可以将分析器从standard
自定义符号化为将每个字符标记化。
然后在查询中:
"function_score": {
...,
"field_value_factor": {
"field": "name.length",
"modifier": "reciprocal"
}
}
我试图通过根据场值提升_score来摆脱弹性搜索中的排序。这是我的场景: 我的文档中有一个字段:应用日期。这是自EPOC以来经过的时间。我希望具有更大应用日期(最近)的记录具有更高的分数。 如果两个文档的分数相同,我想在另一个字符串类型的字段上对它们进行排序。说“状态”是另一个可以有值的字段(可用、进行中、关闭)。所以,具有相同应用程序日期的文档应该根据状态_score。可用应该有更多的分数,进行
我创建了一个非常简单的测试索引,由以下5个条目组成: 然后我执行以下查询: 期望在结果中获得以下顺序: 1)“音乐节” 2)《音乐节舞曲》 然而,我得到了以下结果: 它的顺序似乎完全随机,除了最低分只匹配一个词。 是什么导致了这种情况,我可以改变什么(在映射、索引或搜索过程中)来获得预期的顺序? 注意:对于非完美匹配查询也是如此。搜索“音乐舞蹈”仍然应该产生3个单词条目作为第一个结果,所以使用或增
问题内容: 我想在elasticsearch中执行搜索,而忽略tf- idf搜索中的字段范数。您可以通过设置索引映射来忽略字段规范来完成此操作。但是,这似乎是通过更改索引来完成的,我只想修改搜索(我需要其他类型搜索的规范)。做到这一点的最佳方法是什么?我正在使用elasticsearch.js作为Elasticsearch的接口。 问题答案: 您不能基于每个搜索禁用规范,但是可以使用Multi F
我已经把这个贴在ES组上了,但是我没有得到回应,所以我把它贴在了so上。链接https://discuse . elastic . co/t/missing-field-value-for-nested-field-function-score-query-V7-10-2/291365 我已经尝试了很长时间,但嵌套字段值在计算分数时总是表示缺少字段值。 映射: 为了简单起见,我只保留了一个记录。记
1背景 在本文中,我们将描述如何将地图点与光栅相关联。我的问题是,如果函数st_worldtorastercoordx(rast,geom)在光栅对象中有超过10000*10000个像素,我们如何提高速度。此问题与中间件PostGIS光栅对象相关。 2 创建路测数据点对象 2.1 创建点对象字段 在前面的对象中,我们使用水壶中间件将驱动测试数据文件上传到Postgres-SQL数据库中。在数据库中
问题内容: 我试图获取记录在“标题”中,然后是X个字符。 注意:并非所有记录都包含标题字段。 我努力了: 结果,我得到这个错误: 我该如何解决? 问题答案: 您需要考虑到某些文档可能具有空字段。因此,您可以使用常规的空安全运算符。另外,请确保改用POST方法: