Hi,
I have an Rails application like Craigs List. I'm using Rails4, ES 1.0 and
elasticsearch-rails.
When listing Ads, I want items that has the same latitude and longitude to
be sorted by date.
How can I get ES to sort the ads that has the same geocoordinates by the
created_at field?
A ruby controller test that explains what I want:
it "Ads that have the same coordinates, are sorted by the newest first" do
@oslo1 = Fabricate(:ad, title: 'oslo1', lat: A28_LAT, long: A28_LONG)
@oslo2 = Fabricate(:ad, title: 'oslo2', lat: A28_LAT, long: A28_LONG)
@oslo3 = Fabricate(:ad, title: 'oslo3', lat: A28_LAT, long: A28_LONG)
@trondheim1 = Fabricate(:ad, title: 'trondheim1', lat: 63.4291382, long: 10.3941603)
@trondheim2 = Fabricate(:ad, title: 'trondheim2', lat: 63.4291382, long: 10.3941603)
@trondheim3 = Fabricate(:ad, title: 'trondheim3', lat: 63.4291382, long: 10.3941603)
get :index, lat: A28_LAT, long: A28_LONG
assigns(:ads).to_a.should eq [@oslo3, @oslo2, @oslo1,
@trondheim3, @trondheim2, @trondheim1]
*# The query that should *list all active ads, sorted by distance.
#
def self.list(lat, long)
{
query: {
match_all: {}
},
filter: {
term: { state: "active" }
},
sort: [
{
_geo_distance: {
coordinates: "#{lat}, #{long}",
unit: "km"
}
}
]
}
end
My mapping
{
"ads-production" : {
"ad" : {
"dynamic" : "false",
"properties" : {
"coordinates" : {
"type" : "geo_point"
},
"created_at" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"description" : {
"type" : "string",
"analyzer" : "norwegian"
},
"state" : {
"type" : "string"
},
"title" : {
"type" : "multi_field",
"fields" : {
"title" : {
"type" : "string",
"analyzer" : "norwegian"
},
"title.ngram" : {
"type" : "string",
"index_analyzer" : "ngram",
"search_analyzer" : "ngram_search",
"include_in_all" : false
}
}
}
}
}
}
}
Cheers,
Martin Stabenfeldt
--
You received this message because you are subscribed to the Google Groups "elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elasticsearch+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elasticsearch/8f24ee37-469c-4f5e-8e0a-941ae027ee88%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.