2010-12-22 7 views
2

like, , startswith 연산자와 비슷한 쿼리를 생성하는 방법이 있습니까?Google 애플리케이션 엔진이있는 web2py와 비슷한 항목

그래서 비슷한 할 수 : web2py에서 응용 프로그램 엔진

db(db.some_table.like('someting')).select() 

합니다.

+0

다음으로 시작하십시오 : http://stackoverflow.com/questions/1554600/implementing-starts-with-and-ends-with-queries-with-google-app-engine; 다른 2는 불가능합니다. 덕분에 – geoffspear

답변

7

앱 엔진은 전문 검색을 지원하지 않으므로 짧은 대답은 아니오입니다.

web2py로 수행 할 수있는 작업은 검색 할 키워드 목록이있는 계산 된 파일을 생성하는 것입니다.

def tokenize(r): return [x.lower() for x in re.compile('\w+').findall(r.title)] 

db.define_table('data', 
    Field('title'), 
    Field('keywords','list:string',compute=tokenize,writable=False,readable=False)) 

키워드 필드는 StringListProperty()입니다.

은 그런 대신 제목에서 검색, 당신은 키워드를 검색 :

rows = db(db.data.keywords.contains(my_keyword.lower())).select() 

이 GAE에서 작동하고 매우 효율적입니다. 문제는 GAE의 "폭발"인덱스 문제로 인해 복잡한 쿼리에서이를 결합하는 데 사용되지 않는다는 것입니다. 예를 들어 N 개의 키워드가 있고 두 개의 키워드를 검색하려고합니다 :

rows = db(db.data.keywords.contains(my_keyword1.lower())& 
      db.data.keywords.contains(my_keyword2.lower())).select() 

색인 크기는 N^2가됩니다. 따라서 로컬에서보다 복잡한 쿼리를 수행해야합니다.

이 모두는 GAE 및 GAE에서 작동하지 않습니다. 휴대용입니다.

+0

! 좋은 대답 – crodjer