首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有条件衰减函数的多个指标的弹性搜索

具有条件衰减函数的多个指标的弹性搜索
EN

Stack Overflow用户
提问于 2015-02-18 16:45:19
回答 2查看 1.2K关注 0票数 0

我试图用一个查询跨多个索引进行搜索,但只将高斯衰减函数应用于其中一个索引上存在的字段。

我正在通过elasticsearch运行这个部分,这个部分工作得很好。

下面是我在惊奇中运行的查询。

代码语言:javascript
复制
GET episodes,shows,keywords/_search?explain
{
"query": {
  "function_score": {
    "query": {
      "multi_match": {
        "query": "AWESOME SAUCE",
        "type": "most_fields",
        "fields": [ "title", "summary", "show_title"]
      }
    },
    "functions": [
      { "boost_factor":  2 },
      {
        "gauss": {
          "published_at": {
            "scale": "4w"
          }
        }
      }
    ],
  "score_mode": "multiply"
  }
},
  "highlight": {
  "pre_tags": ["<span class='highlight'>"],
  "post_tags": ["</span>"],
  "fields": {
    "summary": {},
    "title": {},
    "description": {}
   }
 }
}

这个查询对于剧集索引非常有用,因为它有一个published_at字段,让高斯函数可以发挥它的魔力。然而,当运行所有的索引,它失败的节目和关键字(仍然成功的插曲)。

如果published_at场存在或在单集索引上运行条件高斯衰减函数,是否有可能?

我愿意探索其他方法(即对每个索引运行单独的查询,然后合并结果),但我认为,就性能而言,一个查询是最好的。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-06 14:06:19

您可以添加一个过滤器,仅将这些高斯衰减函数应用于文档的一个子集:

代码语言:javascript
复制
{
  "filter": {
    "exists": {
      "field": "published_at"
    }
  }
  "gauss": {
    "published_at": {
      "scale": "4w"
    }
  }
}

对于没有字段的文档,可以返回0的分数:

代码语言:javascript
复制
{
  "filter": {
    "missing": {
      "field": "published_at"
    }
  }
  "script_score": {
    "script": "0"
  }
}
票数 1
EN

Stack Overflow用户

发布于 2021-10-01 12:14:10

在更新的elasticsearch版本中,您必须使用脚本评分查询功能评分查询已不再受欢迎。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28589015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档