我的弹性索引包含不同语言的类型。
如果可用,我需要选择使用当前语言的不同文档,如果当前语言不可用,我需要选择任何其他文档。
我可以在PostgreSQL中做这样的事情(尽管可能有更好的方法):
SELECT DISTINCT ON (i) * FROM
(SELECT * FROM
(SELECT id i, name n, locale l, f_active a FROM news c
UNION ALL
SELECT id i, name n, locale l, (SELECT cc.f_active FROM news cc WHERE cc.id = cl.id) a FROM news_locale cl
) s
ORDER BY l = 'en' DESC
) ss
WHERE a = true
我想知道,如果有可能在elasticsearch中这样做吗?
P.S。我可以在一个文档中存储所有已定位的字段,但问题是大多数情况下我只需要选择一个特定的区域设置。
答案 0 :(得分:0)
我成功实现了这样的目标:
{
"query": {
"query_string": {
"query": "(isActive:true) AND (isDeleted:false)"
}
},
"aggs": {
"top_ids": {
"terms": {
"field": "id",
"order": {
"title": "desc"
},
"size": 10
},
"aggs": {
"top_ids_hits": {
"top_hits": {
"sort": {
"_script": {
"type": "number",
"script": {
"inline": "doc['locale'].value == lang ? 1 : 0",
"params": {
"lang": "ru"
}
},
"order": "desc"
},
"_score": {
"order": "desc"
}
},
"size": 1
}
},
"title": {
"max": {
"field": "num_field"
}
}
}
}
},
"size": 0
}
但是有两个问题:我无法设置top_id术语,也不能按非数字字段排序。
我想现在还没有解决这些问题的方法。