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