2014-09-12 4 views
0

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 
    ) 
    ) 
} 

무엇이 문제입니까?

+0

에서

당신은 위치를 색인하고 있습니까? _source 필드의 내용은 자동으로 인덱싱 할 수 없으며 페치에 사용할 수 있습니다. – monkjack

+0

내가 ES에 넣은 매핑은'location' 필드의 타입을'GeoPointType'으로 설정했습니다; 더 잘 설명하기 위해 게시물에 수정 사항을 추가했습니다. 위치 입력란에서 기본적으로 색인 생성이 가능합니까? @monkjack – Ashesh

+0

매핑을 올바르게 설정하는 중입니다. 그러나 실제로 데이터를 "색인"(삽입)하면 Elasticsearch에 위치 필드가 무엇인지 알려주지 않은 것처럼 보입니다. _source에 넣는 것만으로는 충분하지 않습니다. 색인을 생성 할 수 있어야합니다. http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-source-field.html – monkjack

답변

1

이것은 elastic4s 질문이 아니지만 일반적인 elasticsearch 질문입니다. tl; dr 귀하는 어떤 필드에 대해서도 색인을 생성하지 않습니다.

데이터를 인덱싱 할 때 인덱싱 할 필드를 지정하면 해당 필드가 검색에 사용됩니다. 또한 검색을 통해 해당 문서와 일치 할 때 가져올 수있는 문서를 저장할 수 있습니다. 원본 문서를 반환 할 수 있지만 인덱싱 할 때 필드 나 파생 필드의 하위 집합을 사용하려는 경우에 유용합니다. elastic4s

index into "myindex"->"mytype" fields ("name"->name, "location"->latlong) source srcdoc

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-source-field.html http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/index-doc.html

+0

사소한 일로 용서해주십시오.하지만 그것은 제가하고있는 일과 거의 같습니다. 나는 "index into"places "->"shops "필드 ("location -> GeoPoint.parseFromLatLon (...) ")로 문서를''색인 ''하지만 어떤 히트도 생성하지는 않는다.ES 문서를 읽고 어떻게 작동하는지 이해해야한다고 생각합니다. – Ashesh