Elasticsearch - 使用条件衰减函数搜索多个索引
Elasticsearch - search across multiple indices with conditional decay function
我试图通过一个查询跨多个索引进行搜索,但仅将高斯衰减函数应用于存在于其中一个索引上的字段。
我运行通过 elasticsearch-apigem 对此进行了调整,那部分工作正常。
这是我 运行 惊叹不已的查询。
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"
}
}
}
对于没有该字段的文档,您可以 return 得分为 0:
{
"filter": {
"missing": {
"field": "published_at"
}
}
"script_score": {
"script": "0"
}
}
在较新的 elasticsearch 版本中,您必须使用 script score query. The function score 查询已被弃用。
我试图通过一个查询跨多个索引进行搜索,但仅将高斯衰减函数应用于存在于其中一个索引上的字段。
我运行通过 elasticsearch-apigem 对此进行了调整,那部分工作正常。
这是我 运行 惊叹不已的查询。
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"
}
}
}
对于没有该字段的文档,您可以 return 得分为 0:
{
"filter": {
"missing": {
"field": "published_at"
}
}
"script_score": {
"script": "0"
}
}
在较新的 elasticsearch 版本中,您必须使用 script score query. The function score 查询已被弃用。