Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 15452|Yanıt: 0

[Kaynak] ElasticSearch (geo_point) içinde Java Coğrafi Konum Bilgisi

[Bağlantıyı kopyala]
Yayınlandı 9.01.2019 17:25:39 | | |
Kısa giriş

ES'nin yaygın temel veri tiplerinin yanı sıra, konum bilgilerini kaydeden veri türlerini de desteklediğini biliyoruz. ES'de, coğrafi konum bilgisini kaydeden iki tür veri vardır: geo_shap ve geo_point; aşağıda kısaca geo_point türlerini tanıtacağım
geo_point birden fazla veri aktarım yöntemini destekler:

String
Konum: lat + "," + lon

Dizi
Pozisyon: {"lat": ...,"lon": ...}

Amaç
Konum: [lon, lat]


Not: Muhtemelen herkes bu çukura en az bir kez basmıştır == Coğrafi koordinat noktaları dizim olarak ifade edildiğinde enlem öncesi, boylam sonuncusu ("enlem, boylam") olurken, diziler zıt biçimde temsil edilir; boylam önce ve enlem son ([boylam, enlem]). Aslında, Elasticesearch içinde, ister bir dizi şeklinde olsun, enlem önce gelir, boylam ise sonuncudur. Ancak, ilk günlerde, GeoJSON'un biçimlendirme spesifikasyonuna uyum sağlamak için dizi biçimlerinin temsili ayarlandı. Bu resmi web sitesinde açıklanmıştır.
Genel olarak geo_point türleri için aşağıdaki sorgu gereksinimleri vardır

Mesafe sorgusu
Merkez noktadan menzil içindeki noktaları bulun

Mesafe menzili sorgusu (kullanımdan kaldırılmıştır)
Merkez noktasının belirtilen aralığındaki sorgulama noktaları yeni ES'de API'den kaldırılıyor, bu yüzden burada çok fazla açıklamayacağım
Sınırlayıcı sorgu
Belirli bir noktadan oluşan bir dikdörtgen içinde noktalar bulun

Çokgen sorgusu
Birden fazla noktadan oluşan bir çokgende nokta bulun

Java'da farklı sorgular için oluşturulan SearchSourceBuilder fabrikası şöyledir:


Hizmet şu şekildedir:

Kontrolcü katmanı kodu şu şekildedir:

[1]. Nasıl kullanılır

geo_point tiplerini kullanmadan önce, indeks oluştururken eşleme yoluyla alanı geo_point tip olarak açıkça belirtmeliyiz, aşağıdaki gibi:


Yukarıda restraunt adında yeni bir indeks oluşturduk ve onun haritalama dosyasında "konum" alanının türünü açıkça "geo_point" olarak belirtiyoruz

[2] Bazı veriler hazırla

Kibana hakkında aşağıdaki verileri topladık:


Yukarıda 7 veri parçası hazırlandık ve ardından arayüzümüzün ihtiyaçlarımızı karşılayıp karşılamadığını görmek için sorguyu yürütmemiz gerekiyor.

[3] Soruşturma

Sorgu mesafesi


Diğer iki soruşturma yukarıdakilerle aynı.




Önceki:ElasticsearchParseException[alanı[alanı] ya [lat], [lon] ya da [geohash]] olmalıdır.
Önümüzdeki:Discuz uygulamayı yüklüyor ve "Veri tanınmıyor, lütfen iade" çözümünü söylüyor
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com