4

我從一個lambda函數在node.js中執行我的AWS CloudSearch域的搜索:AWS CloudSearch - 獲得一個JSON格式的搜索結果

我上傳的文件如這樣:

  { 
       「some_field」: 「bla bla「, 
       「some_date_field」: 1.466719E9, 
       "number_field」: 4, 
       「some_string」: "some long string blabla" 
     } 

我執行這樣

var params = { 
        query: 'bla bla', 
       }; 

    cloudsearchdomain.search(params, function(err, data) { 

     if (err) { 
     console.log(err, err.stack); // an error occurred 
     context.fail(err); 
     } 
     else { 
     context.succeed(data);   // successful response 
     }  

    }); 

搜索作品搜索並按照記錄here CloudSearch返回文檔 info中的hit屬性。這裏是一個例子:

{ 
    "status": { 
    "timems": 2, 
    "rid": 「blabla」 
    }, 
    "hits": { 
     "found": 1, 
     "start": 0, 
     "hit": [ 
       { 
       "id": 「452545-49B4-45C3-B94F-43524542352-454352435.6666-8532-4099-xxxx-1", 
       "fields": { 
        「some_field」: [ 
        「bla bla「 
        ], 
        「some_date_field」: [ 
        "1.466719E9" 
        ], 
        "number_field」: [ 
         "4" 
        ], 
        「some_string」: [ 
        "some long string blabla" 
        ], 
      } 
     } 
    ] 
} 
} 

正如你可以看到所有的字段返回爲數組中的字符串。 有沒有辦法得到結果作爲保留所有字段的 類型的JSON?

+0

@alexroussos - 以爲你現在可能的答案如此標記你 – Zigglzworth

回答

3

提交這個報告AWS後,我收到這個答覆:

你好,這實際上是預期的行爲。 SDK團隊選擇將「fields」屬性實現爲字符串鍵和字符串數組值的字典,以保持AWS SDK存在的各種語言的一致性。他們負責處理客戶端上的各種響應格式(HTTP請求與SDK方法)。有關詳細信息,請參閱:https://github.com/aws/aws-sdk-js/issues/791

不幸的是,目前唯一的解決問題的方法我上面的描述是:

1)創建一個解析器將解析結果需要根據您的預計響應這考慮到你的數據類型

2)添加一個新的字段到你的雲搜索索引(文本類型),包含整個json對象/文檔的字符串版本。然後你可以使用JSON.parse()來獲取JSON格式的文檔。這個解決方案並不理想,因爲它會在您的文檔中添加不必要的文本塊,但它證明了上述問題的快速解決方案。

如果有人知道任何更多的解決方案,我很樂意聽到任何更多的解決方案。

+0

這真是奇怪。感謝發佈! – alexroussos

2

CloudSearch 確實保留字段類型;結果意味着你已經將這些字段配置爲數組。

您可以通過在AWS Web控制檯上轉到您的域的索引選項來確認這一點。您應該看到如下截圖中的字段text-arrayliteral-array等。這些將作爲數組返回。如果您只會爲每個文檔中的每個字段提交一個值,並且您將返回非數組值,則可以將它們更改爲非數組類型。 indexing options

+0

謝謝,但這似乎並不是我的問題,因爲我的字段配置正確。在我的情況下,我在索引配置中僅使用了橫向,整型和文本數據類型。然而這些仍然在數組中返回。 – Zigglzworth

+0

我剛剛確認行爲正如我所描述的(忽略在我的示例中'author'不是返回啓用的事實;我檢查了可返回的其他數組和非數組字段)。我無法想出任何遠程可能的原因,它會對你有不同的表現。您是否使用CloudSearch的2013-01-01版本?您是否嘗試通過curl或瀏覽器直接查詢CloudSearch以獲取原始結果,而不是通過庫? – alexroussos

+0

我正在使用最新的cloudsearch javascript SDK。如果我在cloudsearch控制檯中進行搜索並查看原始JSON,那麼它就像預期的那樣,但是當我按照我描述的方式通過JavaScript SDK進行搜索時,我遇到了數組問題。這可能是JavaScript SDK中的一個錯誤。你使用SDK或curl測試過嗎? – Zigglzworth