2013-04-30 17 views
27

Dokumenty ElasticSearch nie są jasne, jak to zrobić.Jak zaktualizować typ pola w elastycznym wyszukiwaniu

Zindeksowałem niektóre tweety i jedno z pól, created_at, indeksowane jako ciąg zamiast daty. Nie mogę znaleźć reindeksu z tą zmianą poprzez wywołanie curl. Jeśli ponowneindeksowanie jest skomplikowanym procesem, wolałbym po prostu usunąć to, co jest i zacząć od nowa. Ale nie mogę również znaleźć sposobu na określenie typów pól!

Każda pomoc jest bardzo doceniana.

Odpowiedz

23

Trzeba zdefiniować odwzorowanie używając Put Mapping AP I.

$ curl -XPUT 'http://localhost:9200/twitter/tweet/_mapping' -d ' 
{ 
    "tweet" : { 
     "properties" : { 
      "message" : {"type" : "string", "store" : "yes"} 
     } 
    } 
} 
' 

randkę można zdefiniować następująco:

{ 
    "tweet" : { 
     "properties" : { 
      "user" : {"type" : "string", "index" : "not_analyzed"}, 
      "message" : {"type" : "string", "null_value" : "na"}, 
      "postDate" : {"type" : "date"}, 
      "priority" : {"type" : "integer"}, 
      "rank" : {"type" : "float"} 
     } 
    } 
} 
+0

Tak, to jest to. Dziękuję Dadoonet. – maximus

+0

@dadoonet Dowolny sposób na zmianę typu pliku "wiadomość" zmienia się z ciągu na "długi". Program nie działa z błędami {[mapper [wiadomość] innego typu, current_type [string] – Dibish

+1

@dibish No. Musisz ponownie zindeksować. – dadoonet

8

Należy również określić format, nie wystarczy wpisać jeśli wstawiasz mysql timestamp to powinieneś po prostu dodać do niego format w ten sposób.

"properties": { 
    "updated_at": { 
     "type": "date", 
     "format": "yyyy-MM-dd HH:mm:ss" 
    } 
} 

Jeśli weźmiemy pod uwagę swój przykład to powinno być jak

"tweet" : { 
    "properties" : { 
     "user" : {"type" : "string", "index" : "not_analyzed"}, 
     "message" : {"type" : "string", "null_value" : "na"}, 
     "postDate" : {"type" : "date" , "format": "yyyy-MM-dd HH:mm:ss" }, 
     "priority" : {"type" : "integer"}, 
     "rank" : {"type" : "float"} 
    } 
} 
Powiązane problemy