2016-07-29 3 views
1

twitter APIからJSONオブジェクトをPythonスクリプトを使用して弾性検索インスタンスにロードしています。twitter jsonをPythonでエラスティック検索するときのフィールド型マップ

リストには、JSONオブジェクトとしてのツイートが含まれており、弾性検索に解析されます。弾性検索にロードする前に

import elasticsearch 
import json 
import requests 

tweet_list = request(get_tweets_via_request) 
for tweet in tweet_list: 
    es.index(index="twitter",doc_type="tweet",body=tweet) 

、私はstringの代わりdateとしてcreated_atフィールドをマッピングします。マッピングを設定せずにPythonスクリプトを実行すると、created_atフィールドはstringと解釈されます。私はマッピングでcurlコマンドを使用してPythonスクリプトを実行する前に、いくつかのマッピングを適用しようとしている

{"created_at":{"type":"string"}

(carrige戻って/スペース削除)インライン:

curl -XPUT localhost:9200/twitter -d {"settings":{"index":{"number_of_shards":1}},"mappings":{"tweet":{"properties":{"created_at":{"format":"EEEMMMddHH:mm:ssZYYYY","type":"date"}}}}} 

と結果のエラー:

{"error":{"root_cause":[{"type":"parse_exception","reason":"failed to parse source for create index"}],"type":"parse_exception","reason":"failed to parse source for create index","caused_by":{"type":"json_parse_exception","reason":"Unrecognized token 'EEEMMMddHH': was expecting ('true', 'false' or 'null')\n at [Source: [[email protected]; line: 1, column: 99]"}},"status":400} 

答えて

1

the following mappingを使用すると、ツイートのインデックスを作成する前にインデックスを作成できます。

ご覧のとおり、created_atフィールドは、日付として、Twitterフィードに含まれるものと一致する特定の日付形式で宣言されています。

PUT /twitter 
{ 
    "settings" : { 
    "index": { 
     "number_of_shards" : 1 
    } 
    }, 
    "mappings": { 
    "tweet": { 
     "properties": { 
      "created_at": { 
       "format": "EEE MMM dd HH:mm:ss Z YYYY", 
       "type": "date" 
      }, 
      ... 
     } 
    } 
    } 
} 
+0

こんにちは、ありがとう - まだそれを働かそうとしています。 pythonやcurlコマンドで試してみましたが、登録するマッピングを取得できません。 curlを使用してESにpingを実行すると応答が返されますが、マッピングを実行しようとしたときに ''ホスト型エラーを解決できませんでした – joshi123

+0

送信しようとしているカール要求を表示できますか? – Val

+0

確かに、 'curl -X PUT localhost:9200/twitter/_mapping?ignore_conflicts = true -d \ {...' – joshi123

関連する問題