2013-10-08 106 views
3

我正在建立索引的對象同時具有UserId(GUID)和FullName屬性。我想用UserId做一個分面搜索,但是顯示FullName以便它是可讀的。我不想在FullName上做這個方面,因爲它在技術上不必是唯一的。Elasticsearch方面術語與標籤

現在我在做這樣的事情:

{ 
    "query": { 
     "match_all": {} 
    }, 
    "facets": { 
     "userFacet": { 
      "terms": { 
       "field": "userId" 
      } 
     } 
    } 
} 

但後來它給我的GUID中,我需要打的數據庫中查找全名,這顯然不是一個響應真正的解決方

那麼,我怎樣才能使用一個領域做的方面,然後不同的領域的顯示值使用?

+0

能否請你加你正在尋找?我不太明白您的使用效果。你想返回guid和作爲對象數組的名稱? –

+0

我想使用GUID來做faceting,但是我想也返回名稱與該用戶相關聯,因此我可以將其顯示爲網頁面上的標籤。現在,如果我只從ElasticSearch獲取GUID,則需要根據數據庫中的GUID查找名稱,因爲ESID在源對象中有數據,所以似乎可能有辦法無需額外的數據庫查詢即可完成此操作。 –

+0

是的,如果您要將用戶名和guid添加爲嵌套文檔並運行嵌套平面,則會同時返回。如果我明天不在手機上,我可以根據需要提供答案。術語方面僅僅是爲了簡單的值。 –

回答

-1

嘗試添加fields子句來查詢,如下所示:

{ 
    "query": { 
     "match_all": {} 
    }, 
    "facets": { 
     "userFacet": { 
      "terms": { 
       "field": "userId" 
      } 
     } 
    }, 
    "fields": [ "FullName" ] 
} 

注意的是,爲了在搜索結果中返回的字段值,實際上你需要將它們存儲在ES。所以,你需要或者存儲_source(這是預設的,除非你用"_source" : {"enabled" : false}覆蓋它,或者設置"store": "yes"用於在映射該領域。

+0

當我這樣做時,在返回的匹配數組中,它不再具有_source,並被替換爲僅包含請求的字段數組中包含的屬性的字段對象。所以這似乎影響了命中數組而不是所有方面。方面只是顯示用戶ID GUID作爲術語。 –

+0

對不起,我以爲那正是你想要做的。看起來我誤解了你的問題。 –

0

我使用下面的行顯示的字段。 據工作對於 電網僅但不方面。儘管如此面從ID只服用沒有標籤。

fields: [{ 
    id: 'name_first', 
    'label': 'First Name' 
}]