2016-06-07 70 views
0

我有彈性指數與不同語言的類型。彈性搜索中的多類型搜索,使用不同的ID後排序

我需要使用當前語言選擇不同的文檔(如果可用)以及任何其他語言(如果當前語言不可用)。

我可以做的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

我已經成功地實現這樣的:

{ 
     "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_ids條款設置,不能排序的非數字字段。

我想現在沒有解決這些問題的方法。