我试图通过根据场值提升_score来摆脱弹性搜索中的排序。这是我的场景:
我的文档中有一个字段:应用日期。这是自EPOC以来经过的时间。我希望具有更大应用日期(最近)的记录具有更高的分数。
如果两个文档的分数相同,我想在另一个字符串类型的字段上对它们进行排序。说“状态”是另一个可以有值的字段(可用、进行中、关闭)。所以,具有相同应用程序日期的文档应该根据状态_score。可用应该有更多的分数,进行中得分更少,关闭,最少。所以通过这种方式,我不必在得到结果后对文档进行排序。
请给我一些建议。
有一个名为rank_feature_field的新字段可用于此用例:
https://www.elastic.co/guide/en/elasticsearch/reference/current/rank-feature.html
你看过功能分数吗?https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html
具体看上面留档中的衰减函数。
您应该能够使用 函数分数 来实现此目的。根据您的要求,它可能像以下示例一样简单:
put test/test/1
{
"applicationDate" : "2015-12-02",
"status" : "available"
}
put test/test/2
{
"applicationDate" : "2015-12-02",
"status" : "progress"
}
put test/test/3
{
"applicationDate" : "2016-03-02",
"status" : "progress"
}
post test/_search
{
"query": {
"function_score": {
"functions": [
{
"field_value_factor" : {
"field" : "applicationDate",
"factor" : 0.001
}
},
{
"filter": {
"term": {
"status": "available"
}
},
"weight": 360
},
{
"filter": {
"term": {
"status": "progress"
}
},
"weight": 180
}
],
"boost_mode": "multiply",
"score_mode": "sum"
}
}
}
**Results:**
"hits": [
{
"_index": "test",
"_type": "test",
"_id": "3",
"_score": 1456877060,
"_source": {
"applicationDate": "2016-03-02",
"status": "progress"
}
},
{
"_index": "test",
"_type": "test",
"_id": "1",
"_score": 1449014780,
"_source": {
"applicationDate": "2015-12-02",
"status": "available"
}
},
{
"_index": "test",
"_type": "test",
"_id": "2",
"_score": 1449014660,
"_source": {
"applicationDate": "2015-12-02",
"status": "progress"
}
}
]
下面是我的搜索响应示例,检索到4个结果。 现在,我想根据下面的标准,根据特定的“dir”字段值过滤上述搜索结果。 在且仅在以下情况下将搜索结果包含在响应中: 如果“dir”字段值等于“/shared”或“/private/hitesh” 如果“dir”字段值以“/shared/”或“/private/hitesh/”开头,则为其他 如何在ElasticSearch中实现上述功能?
问题内容: 我知道,弹性查询在计算查询检索的文档分数时会考虑字段的长度。字段越短,权重越高(请参见字段长度范数)。 我喜欢这种行为:当我搜索我在更感兴趣比。 现在,我想尝试增强这些功能,比方说,我想使其重要性加倍。 我知道可以使用功能分数来修改分数,并且我想我可以通过脚本分数来实现我想要的。 我试图像这样向得分添加另一个字段长度范数: 但是我失败很严重,得到了这个错误: 编辑: 我的第一个错误是我
问题内容: 需要在ElasticSearch中找到一种方法来根据字段的特定值来提高文档的相关性。具体来说,我所有文档中都有一个特殊字段,该字段值越高,包含该文档的文档就越相关,而与搜索无关。 考虑以下文档结构: 我希望boosting_field值较高的文档与那些boosting_field值较低的文档 本质上相关性 更高。这只是一个起点- 在确定搜索中每个文档的最终相关性分数时,还将考虑查询与其
问题内容: 例如,如果某个东西的“ favourites_count”值更高,我希望它变得更相关,或者如果它最近更新,那么它就更有意义。有没有办法做到这一点?这与标准的boost功能不同,因为这些字段不包含关键字,而是包含数字值。 问题答案: 您可以使用来基于自定义公式增强文档。有关更多详细信息,请参见此处(部分):https : //www.elastic.co/guide/zh- cn/ela
问题内容: 我有一张像这样的表: SQL或蜂巢中是否有一种方法可以将其转换为类似表的形式: 我不确定有没有一个词来描述这种操作…任何帮助将不胜感激! 问题答案: 这基本上是一个。您没有指定要使用的RDBMS,但是可以使用聚合函数和语句在任何数据库中获取结果: 参见带有演示的SQL Fiddle 结果:
问题内容: 我遇到了我不希望做的事情,我不知道该如何处理活动记录(实际上我无法确切地说出如何使用sql来做)。我想根据某个字段的最高值以及其他一些条件来选择记录。以下是一些伪造的东西,它们解释了我的情况。给出以下记录: 我希望能够获取已保存的修订版本号最高的记录。这意味着ID为:3、6和8的记录 我的第一个本能是做某种子查询,该子查询在修订之类的东西上获得MAX。除此之外,我真的不知道该怎么做,因