GeoDistance 쿼리를 작성하기 위해 DSL 구문을 이해하는 데 문제가 있습니다 (한 지점으로부터 일정 거리 내에있는 모든 항목 가져 오기).GeoDistance 쿼리에 elastic4s 사용
현재 내 ES 색인 "places" -> "shops"
에 id = 1
이 있습니다. 샘플 항목이 있습니다.
{
_index: "places",
_type: "shops",
_id: "1",
_version: 5,
found: true,
_source: {
location: {
lat: 50,
lon: 50
},
name: "coffee store",
posted: "2014-09-12T08:53:01.673Z"
}
}
그런 다음 Elastic4s DSL을 사용하여 검색 쿼리를 작성합니다.
val nearbyStoresFuture:Future[SearchResponse] = client execute {
search in "places" -> "shops" filter {
geoDistance("location") point(lat, lon) distance(distance)
}
}
nearbyStoresFuture onComplete {
case Success(s) => {
s
client.close
}
case Failure(t) => {
t
client.close
}
}
이 경우
: 쿼리가 맞다면 어떤 경우에 따라서lat: Double = 50.0
lon: Double = 50.0
distance: String = "50km"
,이 날 ES의 항목을 포함하는 결과를 제공한다 그것은 항목과 같은 지점에 있기 때문에 , 그리고 그러므로 50km의 거리 안에서.
쿼리에 성공했지만 결과가 비어 있습니다.
편집 : 매핑 방법은 다음과 같습니다.
ES.execute {
create index "places" mappings(
"shops" as (
"location" typed GeoPointType,
"name" typed StringType,
"posted" typed DateType
)
)
}
무엇이 문제입니까?
에서
당신은 위치를 색인하고 있습니까? _source 필드의 내용은 자동으로 인덱싱 할 수 없으며 페치에 사용할 수 있습니다. – monkjack
내가 ES에 넣은 매핑은'location' 필드의 타입을'GeoPointType'으로 설정했습니다; 더 잘 설명하기 위해 게시물에 수정 사항을 추가했습니다. 위치 입력란에서 기본적으로 색인 생성이 가능합니까? @monkjack – Ashesh
매핑을 올바르게 설정하는 중입니다. 그러나 실제로 데이터를 "색인"(삽입)하면 Elasticsearch에 위치 필드가 무엇인지 알려주지 않은 것처럼 보입니다. _source에 넣는 것만으로는 충분하지 않습니다. 색인을 생성 할 수 있어야합니다. http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-source-field.html – monkjack