2010-06-11 6 views
13

내가 여기에 설명 된대로 응용 프로그램 엔진은 "오직 하나의 속성에 허용되는 불평등 필터"의 제한이 있음을 알고 있어요 애플 리케이션 엔진에서 쿼리에 두 불평등 필터를 실행합니다 본질적으로 두 개의 필터를 실행하거나 간단히 가능하지 않습니까? 예를 들어 X와 Y 좌표가있는 엔티티 종류가 있고 특정 범위의 X1에서 X2 및 Y1에서 Y2로 모든 엔티티를 원한다면 X1에서 모든 엔티티를 쿼리 할 수있는 방법이 있습니다. X2는 Y 값으로 정렬 된 다음 Y 값에 대한 원하는 범위 사이에서 관련 항목을 쉽게 잡아낼 수 있습니까?얼마나 효과적으로

만약 그렇다면 누군가 보여줄 수있는 몇 가지 예제 코드가 있습니까?

답변

6

데이터에 적합한 경우 X 및 Y를 bin으로 분리하고 두 값의 해시를 생성 한 다음이를 모델에 저장할 수 있습니다. 그런 다음 검색 할 영역과 겹치는 해시를 정확하게 검색 할 수 있습니다. 그런 다음 지역 외부에있는 결과를 수동으로 필터링하십시오.

이것은 본질적으로 위도/경도를 위해 geomodel이 (가) 수행하는 작업입니다.

+0

이 모델의 작동 샘플은 있습니까? 마찬가지로 나이가> 26, 신장이 113 이상인 결과를 얻어야합니다. 어떻게 매핑/쿼리합니까? – nanospeck

+0

연령뿐만 아니라 0, 10, 20, 30, 40 등 각 사용자별로 '10 년'을 저장할 수 있습니다. 그런 다음 [20, 30, 40, 최대 100)]. 그런 다음 결과를 얻은 후에는 26 미만인 필터를 수동으로 필터링하십시오. –

3

알프레드 풀러 (Alfred Fuller)의 최근 Google I/O talk에 따르면 숫자 속성에 대한 여러 불평등 필터를 지원하기 위해 노력하고 있습니다.

+2

아직이 문제가 발생했는지 알 수 있습니까? – clifgray

+1

개체 쿼리에서만. 필터 ('a>', b) .filter ('a2>', b2) SomeModel.all(). –

1

당신이하려는 것에 따라, MultiInequalityMixin 이 재미있을 것입니다. 첫 번째 부등식을 Google 데이터베이스로 전달하고 이후 부등식을 필터로 사용하여 설명하는 것과 거의 같습니다. 면책 조항 : 1 년 전에 작성한 아이디어를 아주 스케치로 구현 했으므로 실제로 끝나지 않았습니다.

두 축을 효율적으로 인덱싱해야한다면 Saxon Druce가 말하듯이 일종의 거합 etc 알고리즘이 필요합니다.

관련 문제