我试图用一个查询跨多个索引进行搜索,但只将高斯衰减函数应用于其中一个索引上存在的字段。
我正在通过elasticsearch运行这个部分,这个部分工作得很好。
下面是我在惊奇中运行的查询。
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场存在或在单集索引上运行条件高斯衰减函数,是否有可能?
我愿意探索其他方法(即对每个索引运行单独的查询,然后合并结果),但我认为,就性能而言,一个查询是最好的。
谢谢!
发布于 2015-11-06 14:06:19
您可以添加一个过滤器,仅将这些高斯衰减函数应用于文档的一个子集:
{
"filter": {
"exists": {
"field": "published_at"
}
}
"gauss": {
"published_at": {
"scale": "4w"
}
}
}对于没有字段的文档,可以返回0的分数:
{
"filter": {
"missing": {
"field": "published_at"
}
}
"script_score": {
"script": "0"
}
}https://stackoverflow.com/questions/28589015
复制相似问题