2009-09-10 5 views
5

연락처 데이터베이스를 구축하는 Google App Engine에서 파이썬으로 시작합니다. 와일드 카드 검색을 구현하는 가장 좋은 방법은 무엇입니까?Python의 Appengine에서 와일드 카드 검색

예를 들어 query ('name =', % ewman %)를 수행 할 수 있습니까?

+1

GAE 검색 API를 사용하여 부분 일치하는 경우 : http://stackoverflow.com/questions/12899083/partial-matching-gae-search-api/13171181#13171181 –

답변

11

불행하게도, 일부 텍스트를 할 수없는 Google 앱 엔진은 일치

From the docs:

팁 : 쿼리 필터 문자열 값의 일부만 일치하도록 명시 적 방법이 없지만, 가짜 수 접두사 일치하여 불평등 필터 :

db.GqlQuery("SELECT * FROM MyModel WHERE prop >= :1 AND prop < :2", "abc", u"abc" + u"\ufffd") 

이 전자 일치 문자열 속성이 prop 인 abc로 시작하는 매우 MyModel 엔티티입니다. 유니 코드 문자열 u "\ ufffd"는 가능한 가장 큰 유니 코드 문자를 나타냅니다. 속성 값이 인덱스에서 정렬 될 때이 범위에 해당하는 값은 지정된 접두어로 시작하는 모든 값입니다.

+0

감사합니다. 그것은 큰 한계로 보인다. contacts.google.com에서 부분 일치를 구현하는 방법에 대해 궁금해하십니까? 어쩌면 일반 SQL 데이터베이스를 사용해야 할 수도 있습니다. –

+0

동의합니다. 전체 텍스트 검색을 시도하고 수행하는 몇 가지 플러그인이있는 것으로 보이지만 시도하지 않았습니다. http://code.google.com/p/app-engine-patch/ – seth

+0

SQL 데이터베이스가 전체 테이블 스캔을 수행하기 때문에 '일반적인 SQL 데이터베이스'로 고정해도 도움이되지 않습니다. 그 쿼리를 실행하기 위해 - 전혀 확장 할 수 없습니다! 자세한 내용은 내 대답을 참조하십시오. –

3

App Engine은 효율적으로 수행 할 수 없기 때문에 '좋아요'쿼리를 수행 할 수 없습니다. 또한 SQL 데이터베이스는 사용할 수 없습니다. 'foo LIKE "% bar %"쿼리는 전체 테이블에 대해 순차적 검색을 수행해야만 실행될 수 있습니다.

역 색인이 필요합니다. 기본 전체 텍스트 검색은 SearchableModel 인 App Engine에서 사용할 수 있습니다. Bill Katz는 향상된 버전 here을 작성했으며 무료로 제공되는 App Engine 용 상용 솔루션 (here)을 사용할 수 있습니다.