elasticsearch - Elasticsearch-使用条件衰减函数搜索多个索引

标签 elasticsearch elasticsearch-api

我正在尝试使用一个查询在多个索引中进行搜索,但是仅将高斯衰减函数应用于一个索引中存在的字段。

我正在通过elasticsearch-api gem运行此部分,并且该部分工作正常。

这是我在奇迹中运行的查询。

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字段存在或在单集索引上,是否可以运行条件高斯衰减函数?

我愿意探索替代方法(即对每个索引运行单独的查询,然后合并结果),但是我认为单个查询在性能方面是最好的。

谢谢!

最佳答案

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

{
  "filter": {
    "exists": {
      "field": "published_at"
    }
  }
  "gauss": {
    "published_at": {
      "scale": "4w"
    }
  }
}

对于没有该字段的文档,您可以返回0分:
{
  "filter": {
    "missing": {
      "field": "published_at"
    }
  }
  "script_score": {
    "script": "0"
  }
}

关于elasticsearch - Elasticsearch-使用条件衰减函数搜索多个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28589015/

相关文章:

elasticsearch 无法在 ubuntu 15.10 中启动服务

elasticsearch - 在 Elasticsearch 中存储嵌套对象

elasticsearch - Elasticsearch排名短/相关标题少

c# - 如何使用弹性REST API中的过滤器打开Kibana发现URL

elasticsearch - elasticsearch字段映射会影响同一索引中的不同类型

java - ElasticSearch Java API : Update Existing Document

java - Elasticsearch : Appending object in existing array of object Field

ElasticSearch Java HighLevelRestClient 连接被拒绝

python - Elasticsearch 滚动结束不返回任何内容