在订购后具有不同ID的elasticsearch中的多类型搜索

时间:2016-06-07 12:16:21

标签: elasticsearch distinct

我的弹性索引包含不同语言的类型。

如果可用,我需要选择使用当前语言的不同文档,如果当前语言不可用,我需要选择任何其他文档。

我可以在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。我可以在一个文档中存储所有已定位的字段,但问题是大多数情况下我只需要选择一个特定的区域设置。

1 个答案:

答案 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术语,也不能按非数字字段排序。

我想现在还没有解决这些问题的方法。