GET http://localhost:9200/books/_mapping?pretty HTTP/1.1
Zwrócony nam zostanie mapping dla wszystkich typów założonych na danym indeksie.
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=UTF-8
Content-Length: 325
{
"books" : {
"book" : {
"properties" : {
"author" : {
"type" : "string"
},
"price" : {
"type" : "double"
},
"title" : {
"type" : "string"
},
"year" : {
"type" : "long"
}
}
}
}
}
Jeżeli kolejne dokumenty naruszą wcześniej zdefiniowany mapping (np. zmieniając typ jednego z pól w JSONie"), ElasticSearch zwróci nam błąd.
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=UTF-8
Content-Length: 129
{"error":"MapperParsingException[failed to parse [year]]; nested: NumberFormatException[For input string: \"a\"]; ","status":400}
Mappingi możemy także definiować ręcznie. Przed wysłaniem jakichkolwiek dokumentów wysyłamy żadanie typu POST pod adres zawierający nazwę nowego indeksu.
POST http://localhost:9200/books2/ HTTP/1.1
User-Agent: Fiddler
Host: localhost:9200
Content-Type: application/json
Content-Length: 384
{
"mappings": {
"book" : {
"_source": {
"enabled": false
},
"properties" : {
"author" : {
"type" : "string"
},
"price" : {
"type" : "double"
},
"title" : {
"type" : "string"
},
"year" : {
"type" : "long"
}
}
}
}
}
Ustawienie_source.enabled na false spowoduje, że zapytania zwracać nam będą jedynie identyfikatory dokumentów bez ich zawartości. Inny przykład pokazujący, co można ustawić dla poszczególnych properties.
{
"mappings": {
"book" : {
"properties" : {
"author" : {
"type" : "string",
"index" : "not_analyzed"
},
"price" : {
"type" : "double",
"store" : "yes"
},
"title" : {
"type" : "string"
},
"year" : {
"type" : "long"
}
}
}
}
}
Pole index ustawione na analyzed sprawi że wartości zostaną przeanalizowane i zaindeksowane przez ElastcSearch. Dla pól typu string ustawienie wartości not_analyzed spowoduje, że pole zostanie zaindeksowane, ale nie będzie przetwarzane przez analyzer, tak więc search zwróci wyniki tylko w przypadku, gdy podamy dokładnie któryś z wyrazów zawartych w tym polu. Nie będzie zatem możliwe na przykład przeszukiwanie po przedrostkach typu "Mi*". Pole store odpowiada temu, czy oryginalna wartość pola powinna być wpisywana do indeksu. Dodatkowo dla dat możemy ustawiać format zgodnie z tą listą. Przy bardziej zaawansowanych problemach możemy także dla danego indeksu wybrać specjalny analizator.
Maping dynamiczny można także w pewien sposób konfigurować. Jeżeli chcemy wymusić, aby pola wysyłane jako string były rzutowane do long-ów wtedy gdy to możliwe, przy tworzeniu indeksu wysyłamy następujący obiekt.
POST http://localhost:9200/books5 HTTP/1.1
User-Agent: Fiddler
Host: localhost:9200
Content-Type: application/json
Content-Length: 83
{
"mappings": {
"book" : {
"numeric_detection" : true
}
}
}
Brak komentarzy:
Prześlij komentarz