2011-09-13 3 views
2

질문 : 시간 및 검색 횟수를 기반으로 웹 응용 프로그램의 검색어에 사용 된 키워드의 순위를 매기는 방법은 무엇입니까?순위 검색 키워드

사용자가 텍스트 상자에 검색 쿼리를 입력합니다. Via AJAX 사용자에게 몇 가지 제안을 보내야합니다. 이 제안은 해당 키워드에 대해 번의 검색 건수를 기반으로하므로 으로 가장 최근에 검색 한으로 정렬해야합니다.

예를 들어 사용자가 "hang"으로 검색 용어를 입력하면 제안은 "숙취 2", "숙취 2"순이어야합니다.

검색어를 저장할 데이터베이스를 어떻게 디자인해야합니까? 추천을 얻으려면 SQL 쿼리를 어떻게 작성해야합니까?

답변

3

쿼리 제안의 경우 각 검색 쿼리의 발생 횟수를 계산하는 것이 좋습니다. 동일한 사용자가 반복 쿼리를 계산하지 않는 것이 좋습니다.

"britney spears" 12 
"kelly clarkson" 5 
"billy joel" 27 
"query abcdef" 2 
"lady gaga" 39 
... 

그런 다음 당신은 발생의 내림차순으로 정렬 할 수 있습니다 : 당신은이 같은 파일/테이블/일 (쿼리 수를)해야합니다 그리고

"lady gaga" 39 
"billy joel" 27  
"britney spears" 12 
"lady xyz" 5 
"query abcdef" 2 
... 

사람이 "lady"를 검색하고, 대한 예를 들어, 파일/테이블/무언가의 맨 위부터 맨 아래까지 모든 문자열에 접두어 검색을 수행하십시오. K 개의 추천 만 받고 싶은 경우 Top-K 개의 추천을 찾을 때까지 이동합니다.

당신이 간단한 파일을 사용하여 구현할 수, 또는 당신은 또한 계산 쿼리 테이블을 가지고 비슷한 쿼리를 수행 할 수 있습니다

SELECT q.query from (SELECT * from search_queries order by query_count DESC) as q where q.query LIKE "prefix%" LIMIT 0,K 

두 노트 :

  1. 있습니다 (더를 이것을하기의 더 어려운) 방법. 예를 들어, 아마존은 훌륭한 쿼리 제안을 가지고 있습니다.
  2. 제공된 솔루션은 사용자 쿼리로 시작하는 쿼리 만 제안합니다.마찬가지로 :

    "여자"=> [ "여자 가가", "여성 XYZ"]

쿼리 "여자"는 "가가 레이디"를 일치하지 않습니다. 일치 시키려면 데이터베이스의 전체 텍스트 검색 지원이나 Lucene과 같은 외부 라이브러리를 통해 쿼리 인덱싱이 필요합니다.

+0

@Jeyanth Kumar : 왜이 ​​대답을 받아 들였습니까? Felipe는 "가장 최근에 검색 한"결과를 주문하는 방법을 설명하지 않습니다. I.E. '숙취'는 더 많은 검색이있는 경우 항상 '숙취 2'이전입니다. 그냥 선생님! – Briguy37

+0

@ Briguy37 : 쿼리 카운트 필드를 한 번 "재설정"하면 쉽게이 작업을 수행 할 수 있습니다. all-time-query-count에 대한 열/필드와 today-query-count 등에 대한 열/필드를 저장할 수 있습니다. 구현 방법에 대한 개념은 동일합니다. –

0

자동 진단과 같은 것이 필요합니까? autocomplete이라는 JQuery 플러그인이있어 사용자가 문자를 입력하자마자 유사한 단어를 찾습니다. 그러나 사용자가 키워드를 검색 한 횟수를 기준으로 제안 사항을 얻으려면 키워드를 별도의 테이블에 저장 한 다음 나중에 다른 사용자를 위해 키워드를 가져와야합니까?

1

이상적으로, 당신은 다음과 같이 정렬 할 것 :이 수정되어야 할 것이다

order by sum(# of searches/(how long ago that search was performed + 1)) 

얼마나 오래 전에 적절한 기준 시간에 기초가되도록. 예를 들어 일주일에 한 번 검색이 절반으로 계산되도록하려면 1 주일 = 1을 설정하십시오.

모든 검색 결과에 대해 각 검색이 수행 된 시간을 계산하기 때문에 시간이 많이 걸릴 것이므로 분명히 비효율적입니다. 태워 버리는. 따라서 각 검색에 대해 누적 합계를 유지하고 매 시간마다 합계에 특정 값을 곱할 수 있습니다. 예를 들어, 검색이 일주일 후 반으로 계산되게하려면 검색 할 때마다 해당 열에 하나를 추가합니다. 그런 다음 매주 .5 씩 검색 열을 곱하는 프로세스가 있습니다. 그런 다음 해당 열을 정렬하면됩니다.