2016-11-20 10 views
0

저는 ElasticSearch에서 초보자입니다. geopoint (lat/long) 목록이 geopoints 목록에 존재하는지 테스트하려고합니다.ElasticSearch에서 나를 도울 사람을 찾으십시오.

예를 들어 나는이 GeoPoint의 제공 :

"lat": 49.01536940596998 
"lon": 2.4967825412750244 

을 나는이 점은 아래 목록에있는 경우 테스트하려는. 감사.

"positions": [ 
    { 
     "millis": 12959023, 
     "lat": 49.01525113731623, 
     "lon": 2.4971945118159056, 
     "rawX": -3754, 
     "rawY": 605, 
     "rawVx": 0, 
     "rawVy": 0, 
     "speed": 9.801029291617944, 
     "accel": 0.09442740907572084, 
     "grounded": true 
    }, 
    { 
     "millis": 12959914, 
     "lat": 49.01536940596998, 
     "lon": 2.4967825412750244, 
     "rawX": -3784, 
     "rawY": 619, 
     "rawVx": -15, 
     "rawVy": 7, 
     "speed": 10.841861737855924, 
     "accel": -0.09534648619563282, 
     "grounded": true 
    } 
... 
} 

답변

1

개체 배열에서 검색하려면 nested data type을 사용해야합니다. 연결된 페이지에서 설명하는 것처럼 배열의 내부 요소를 독립적으로 유지하려면 기본 매핑을 사용할 수 없습니다. 먼저 매핑을 업데이트해야합니다.

참고 : 매핑은 새 인덱스에만 적용됩니다. Reference.

PUT YOUR_INDEX 
{ 
    "mappings": { 
    "YOUR_TYPE": { 
     "properties": { 
     "positions": { 
      "type": "nested" 
     } 
     } 
    } 
    } 
} 

이제 우리는 데이터를 조회 할 수 있습니다. 다른 검색어 (귀하의 경우 term queries)를 결합하는 bool query을 찾고 있습니다.

POST _search 
{ 
    "query": { 
    "nested": { 
     "path": "positions", 
     "query": { 
     "bool" : { 
      "must" : [ 
      { "term" : { "lat": 49.01536940596998 } }, 
      { "term" : { "lon": 2.4967825412750244 } } 
      ] 
     } 
     } 
    } 
    } 
} 
+2

매핑을 수정하고 있으므로 동시에 위도/경도 값에 대한 'geo_point' 필드를 도입하지 않는 이유는 무엇입니까? – Val

+0

@fylie 덕분에 우리에게 많은 도움이되었습니다. 실제로 많은 데이터 (위치)가있는 대용량 문서 작업을하고 있습니다.이 확장 정보 블록에서 직접이 문서를 추가하려고 할 때이 큰 데이터를 추가하는 가장 좋은 해결책은 무엇입니까? elasticsearch 및 결과를 얻는 데 시간이 걸리기 때문에 요청 시간을 최적화하는 방법도 있습니다. – Taybou

+0

@Val, 위도/경도 값에 대한'geo_point' 필드를 소개하려했지만, 위치가 다른 많은 필드로 구성되어 있기 때문에 내가 할 수 없다는 오류가 나타납니다. – Taybou