2012-09-04 12 views
0

많은 연락처와 관련 태그가있는 비교적 간단한 애플리케이션 (예 : CRM)이 있습니다.고급 데이터베이스 쿼리 - appengine 데이터 저장소

사용자는 지난 10 일

  • updated_time로
  • 태그하지 XXX에
  • FIRST_NAME이 XXX로 시작 XXX에
  • 태그를 같은 기준 (검색 항목)을 많이주는 검색 할 수 있습니다
  • FIRST_NAME하지 아래

    내가 '스미스'

에서 두 가지 이상의 속성에서 필터가 작동하지 않는 방법과 색인 생성 방법에 대해 설명합니다.

나를 위해, 대부분의 경우보고가 cron으로 수행되므로 모든 레코드를 반복하여 처리 할 수 ​​있습니다. 그러나 최선의 최적화 된 경로를 알고 싶습니다.

'ALL'을 쿼리하는 대신 appengine 디자인 제한으로 실행 한 다음 쿼리의 나머지 항목과 수동으로 일치시킬 수있는 쿼리를 사용할 수 있기를 기대합니다.

한 가지 방법은 첫 번째 검색 항목부터 시작하여 개수를 얻고 다른 다음 검색 항목을 추가하고 개수를 가져 오는 것입니다. 그것이 밖으로 보석금을 부과하는 지점, 나는 그 다음 수동으로 나머지 검색 항목으로 그 기록들을 처리한다.

문제는

  • 쿼리 프로그래밍 방식 유효한지 알 수있는 손 전에 방법이있다 w/한 세트에 검색 항목의 최고를 결정하려면 어떻게 카운트
  • 을하고 O를하는 (not-in이 많은 필터에서 작동하지 않는 것처럼) 충돌하지 마라.

내가 볼 수있는 유일한 방법은 모든 동등한 필터를 하나의 쿼리로 가져 오는 것이고, 첫 번째 동등 필터를 사용하거나, 실행한다. 검색 엔티티를 반복하면됩니다.

나를 도울 수있는 라이브러리가 있습니까)

답변

0

은 두 개 이상의 속성을 작업 할 수 없습니다 인덱싱 및 방법 필터 (안)에 이해합니다.

이것은 사실이 아닙니다. 여러 필드에서 필터를 수행 할 수있는 "복합 인덱스"를 만들 수 있습니다. 이들은 추가 데이터를 소비합니다.

쿼리 할 때 사용할 수있는 고유 한 "합성 필드"를 생성하여 고유 한 합성 색인을 생성 할 수도 있습니다. 쿼리 카운트

을하고 O/내가 당신을 언급하고 유효성 어떤 종류의 이해가 확실하지 않다 프로그래밍 방식 승 유효한 경우 손이 알고 전에

이는 방법입니다.

당신이 충돌하지 않는 집합에서 검색 항목의 최고를 결정하려면 어떻게 등 (같은하지-에 많은 필터를 작동하지 않습니다)

은 A "하지에서"필터입니다 사소하지 않아. 한 가지 방법은 두 개의 배열 (반복 된 필드)을 만드는 것입니다. 하나는 모든 태그가 지정된 항목이고 하나는 모든 태그가 아닙니다. 이렇게하면 태그가 있거나없는 모든 항목을 쉽게 찾을 수 있습니다. 유일한 문제는 일단 새 태그를 만들면 엔티티 전체를 스윕하고 모든 엔티티에 대해 "비공개"항목을 추가해야한다는 것입니다.

+0

많은 검색 기준이 있으므로 복합 색인을 사용할 수 없습니다. 약 20 개입니다. in in and in. 사용자가 제공 한 평등 및 불평등 기준이 여러 개 있다고 가정 해 봅시다. 현재 모든 평등 필터를 먼저 적용하고 결과를 얻은 다음 초기 쿼리 집합의 나머지 필터를 기반으로 결과를 필터링합니다. . 초기 질문은 가능한 한 많은 검색어를 추가 할 수 있는지 여부를 확인하는 것이 었습니다. 태그 배열에 대해서도 태그가 동적으로 사용자에 의해 자주 추가되므로 배열을 사용할 수 없습니다. – cloudpre

관련 문제