Skip to content

Instantly share code, notes, and snippets.

View rlisowski's full-sized avatar

Rafał Lisowski rlisowski

  • Warsaw, Poland
View GitHub Profile
@rlisowski
rlisowski / es_query.rb
Created October 17, 2017 09:26
MapFilter es query
query = {
"_source":false,
"query":{
"bool":{
"must":{ "match_all":{} },
"filter":{
"geo_shape":{
"location":{
"relation": "within",
"shape": RGeo::GeoJSON.encode(Shapefile.where(area_name: 'BR2').first.geometry)
@rlisowski
rlisowski / elasticsearch_locations_importer.rb
Last active October 18, 2017 05:56
MapFilter elasticsearch locations importer
class ElasticsearchLocationsImporter
def call
ElasticsearchImporter.new(
index_alias: 'locations',
mapping: mapping,
payload: locations_body
).call
end
private
class ElasticsearchShapefilesImporter
def call
ElasticsearchImporter.new(
index_alias: 'shapefiles',
mapping: mapping,
payload: shapefiles_body
).call
end
private
@rlisowski
rlisowski / elastisearch.rb
Created October 13, 2017 07:48
MapFilter elastisearch
es_params = { urls: ENV.fetch('ELASTICSEARCH_URL', 'localhost:9200'),
retry_on_failure: 5,
retry_on_status: [400, 500, 502, 503],
reload_connections: 10_000,
reload_on_failure: true,
sniffer_timeout: 15,
request_timeout: 5 * 60}
if ENV['ELASTICSEARCH_LOGGER_ENABLED'].present?
@rlisowski
rlisowski / Gemfile.rb
Last active October 13, 2017 07:48
MapFilter dependencies
gem 'connection_pool'
gem 'elasticsearch'
@rlisowski
rlisowski / benchmark_postgres.rb
Last active October 18, 2017 05:40
MapFilter benchmark postgres
require 'benchmark/ips'
Benchmark.ips do |x|
x.report("PostgreSQL join") do
Location.joins("LEFT JOIN shapefiles ON ST_Covers(geometry, coordinates)").where(shapefiles: { area_name: 'BR2' }).size
end
x.report("PostgreSQL param") do
Location.where('ST_Covers(?, coordinates)', Shapefile.where(area_name: 'BR2').first.geometry.to_s).size
end
@rlisowski
rlisowski / filter.rb
Last active October 18, 2017 05:40
MapFIlter filter
Location.
joins("LEFT JOIN shapefiles ON ST_Covers(geometry, coordinates)").
where(shapefiles: { area_name: 'BR2' }).
size
# produces SQL query
# SELECT COUNT(*)
# FROM "locations"
# LEFT JOIN shapefiles ON ST_Covers(geometry, coordinates)
# WHERE "shapefiles"."area_name" = $1 [["area_name", "BR2"]]
@rlisowski
rlisowski / location.rb
Last active October 18, 2017 05:35
MapFilter location model
class Location < ApplicationRecord
end
@rlisowski
rlisowski / 20171012070109_create_locations.rb
Last active October 18, 2017 05:35
MapFilters locations migration
class CreateLocations < ActiveRecord::Migration[5.1]
def change
create_table :locations do |t|
t.st_point :coordinates, geographic: true
t.timestamps
end
end
end
@rlisowski
rlisowski / database.yml
Created October 11, 2017 11:18
MapFilters database
default: &default
adapter: postgis
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: MapFilters_development
test: