2012-06-08 5 views
1

검색어 로그를 사용하여 조사를하고 싶습니다. 나의 첫번째 관심사는 동향을 발견하는 것입니다. 예를 들면 : 겨울에는 종종 찬 상처가 있습니다. 그래서 나는 겨울에 그러한 타입 쿼리의 성장을 볼 수 있다고 생각합니다.검색 엔진 검색어 로그의 동향 찾기

어떻게 동향을 탐지 할 :

  1. 설정 빈번한 항목을 얻을 수 apriory 알고리즘 또는 무언가를 사용. 시간 범위의 각 세트 (1 시간 등 일일) 발견 상대 함수 변화 에
  2. 사용 선형 회귀
  3. 카운트 수 이것은 우리가 단지 (a *를 계산, 회귀 AX + B이면 (FIRST_DATE) + B)/(A * (second_date) + B)

그래서 내가 문제가 있습니다 : 그것은 데이터 (내가 수백만 쿼리가)의 대형 세트에 설정 발견 자주 항목으로 매우 어려운 합니다. Apriory 알고리즘을 구현했지만 낮은 지원으로 매우 느리게 작동합니다 (예 : 200k 쿼리에서 2 일 걸릴 수도 있습니다)

필자의 경우 어떤 알고리즘이 가장 좋습니까? 어쩌면 내가 다른 방법으로 내 작업을 해결할 수 있을까?

+0

@ Yavar 나는 하나의 기계 (또는 2 개) 만 가지고있다. 그래서 제가 배부 된 이유는 없습니다. – Neir0

답변

0

다음은 전체 컬렉션이 아닌 요청한 시간 프레임의 문자열 만 계산하도록 제한하는 내용입니다.
쿼리를 정렬 된 확장 가능한 데이터 구조로 저장 - skip list이 여기에 적합 할 것입니다.
건너 뛰기 목록의 쿼리 순서는 시간에 따라 오름차순입니다.
참고 : 건너 뛰기 목록에 새 쿼리를 추가하는 것은 쉽습니다. 기존 쿼리를 항상 "더 크게"(이후에 발생) 때문에 항상 추가합니다.

이제 시간 프레임을 검색해야하는 경우 - 시간 프레임의 첫 번째 요소와 마지막 요소를 찾을 수 있기 때문에 모든 쿼리에 대해 반복 할 필요는 없습니다. 건너 뛰기 목록에서 빠릅니다.

효율성을 높이기 위해 각 문자열에 고유 한 ID를 부여하고 ID 만 저장하는 바이 - 맵을 사용합니다. ID에서 히스토그램을 만드는 것이 더 쉽게 (계산적으로 말하기), 원본 문자열에 대해이를 만드는 것입니다. 가장 빈번한 ID를 찾은 후에지도에서 참조하는 문자열을 추론 할 수 있습니다.