Utworzono indeks elastycznego wyszukiwania, a moje bieżące mapowanie zapisuje kwotę w dolarach jako ciąg. To okazuje się trudne, ponieważ nie mogę poprawnie wyszukiwać/filtrować tej wartości.Jak przechowywać pieniądze w elasticsearch
GET catalog/product/_search
{
"filter": {
"range": {
"price": {
"from": 230.0,
"to": 300.0
}
}
}
}
Gdzie cena jest odwzorowana jako ciąg. Użyłem ciągu znaków, ponieważ przechodząc od wartości dziesiętnej w pythonie, miałem problemy, w których ta wartość nagle uzyskała wartości na poziomie 17,989999999999999999998789. Zdarza się to tylko czasami, ale nie chcę wchodzić w kwestię przejścia z dziesiętnego w pythonie do java double/float (więc po prostu str() rzecz).
Jakieś przemyślenia na temat lepszego podejścia? Czy powinienem ugryźć kulę i odwzorować cenę na podwójną lub zmienną?
Problem polega na tym, że ElasticSearch nie ma typu "dziesiętnego", więc prawdopodobnie jest konwertowany na 'float'. Pomnożyć przez 100 i zapisać jako centy, a następnie przekonwertować stronę aplikacji? Cześć z dokładnością. –
To świetny pomysł. Jeśli odpowiesz, mogę oznaczyć to jako takie. Jedynym problemem jest zwracanie dużej ilości danych, pętla nad wszystkimi tymi elementami może być kosztowna (wolna) strona aplikacji. Mógłbym użyć skryptu ES, ale to zbyt wolne, pomyślałem. – stincity
Możesz również rzucić okiem na pierwszą odpowiedź na to pytanie http://stackoverflow.com/questions/1458633/how-to-deal-with-floating-point-number-precision-in-javascript – Val