2010-04-16 7 views
2

AJAX 자동 완성은 구현하기가 매우 쉽습니다. 그러나, 나는 이렇게 스마트 태그 제안을 처리하는 방법을 궁금해.태그 제안 (태그 자동 완성 제외)

  • 자동 완성 : foo에 [foobar와, foobaz]
  • 제안 : foo에 [foobaz barfoo, foobar와,, 또는

    자동 완성제안의 차이를 명확히하기 '바보, 포바바, 포 바즈, 포바, 포바 즈'

태그로 전체 텍스트 검색이 필요하다고 가정합니다. 제한된 수의 태그 (심지어 클라이언트 측)에 대해서도 정규 표현식이나 다른 패턴을 사용하는 데 아무런 문제가 없습니다.

그러나 많은 수의 태그에 대해이 기능을 구현하는 방법은 무엇입니까?
URL에 특별한 이유가 있습니까? 태그가 대시로 구분되어 있습니까? 태그의 유니 코드 문자는 어떻습니까?

태그를 id, tagname 열에 테이블에 저장합니다. 내 SQL 쿼리는 다음과 같은 필드 개체를 반환 : 아이디, 태그 이름을

(나는 기본 DB 드라이버로 교리 ORM과를 pgsql을 사용합니다.) 계산

답변

3

을 내가 모든 키를 누를에서 정규 표현식에 의해 데이터베이스에서 선택과 함께 갈 것입니다. 나는 내 사이트에서 이것을했는데 아무런 프리 플로어 스 문제도 없었다 (나는 무거운로드 된 서버 생각이 없다). 이 아이디어가 마음에 들지 않으면 사용자가 별도의 테이블에 매일 입력하고 새로 고치는 모든 1-5 글자 조합을 현금화합니다. 이 테이블이 색인 된 경우 매우 빠른 구현이 있습니다.

두 번째 appreach에 더 정교한하려면

간단히 1. 키워드 betwean 1-N의 관계를 나타내는 테이블 SEARCHTABLE를 확인하고 태그의 차 ID를 (3-4 문자로 제한). 2. 두 필드를 모두 표시하십시오. 3. 사용자가 검색을 수행 할 때마다 SEARCHTABLE을 살펴보고 조합이 있으면 그 색인을 사용하므로 매우 빠릅니다. 그렇지 않으면 regexp 검색을 수행하고 모든 결과를 SEARCHTABLE에 놓습니다.

주 : 태그를 추가 경우

  1. 당신은 테이블을 무효화해야하지만이해야 훨씬 덜 자주 검색보다. 테이블을 무효로 할 때 이 필요하지 않을 경우 은 모두 키워드를 고려하여 쉽게 다시 작성할 수 있습니다.
  2. 속도를 높이려면 개의 문자 검색을 모두 "사전 생성"할 수 있습니다.
  3. 충분히 신경 쓰면 n-1 문자 kewords의 정보를 사용하여 n 문자 키워드 을 생성해야합니다. 그것은 엄청나게 빠른 것들입니다. 사용자가 "mo" 을 입력했으며 SEARCHTABLE에서 적절한 결과를 얻었 음을 상상해보십시오. 그녀가 "n"을 입력 할 때보 다 "mon"을주는 을 입력하면 이미 선택한 항목 만 새 응답 을 생성합니다.

희망 사항 : 지금 더 넓어졌습니다.

+0

정규식없이 접근법을 자세히 설명해 주시겠습니까? – takeshin

+0

나는 조금 대답을 정교하게 만들었다. – gorn

+0

설명해 주셔서 감사합니다. – takeshin

관련 문제