2014-06-22 3 views
0

스핑크스 검색에서 indexer --buildstopwords dict.txt 100000 .... 기능을 발견 한 것은 지정된 색인에서 가장 자주 사용되는 용어를 포함하는 불용어 파일을 만듭니다.mysql 또는 스핑크스에서 순위가 ​​매겨진 키워드 (빈도 기반) 생성

bedroom 974428 
sale 888884 
for 884699 
house 515221 
delivery 464002 
day 462239 
same 406905 
5dr 364648 

그러나 오히려 전체 데이터베이스를 위해 그 일을보다 내가 개별 범주에 대한 목록을 생성하고 싶습니다 : 여기 내 인덱스 중 하나의 출력 샘플입니다. 스핑크스 인덱서로는 불가능한 것입니다.

mysql의 title 필드에서 키워드 목록을 생성하고 정렬 된 목록으로 검색된 결과가 인기를 얻은 다른 방법이 있습니까?

모든 대답 중 한 가지 가능한 문제점은 mysql의 title 테이블이 인덱싱되지 않아서 (스핑크스가 내 검색을 처리함) 10M 이상의 레코드가 있다는 것입니다.

답변

1

'모든'스핑크스는 buildstops 함수와 함께 인덱싱 쿼리 'sql_query'를 실행하고 결과를 단어로 나눕니다 (일반적인 토큰 화 규칙대로) freqeuencs를 계산합니다.

색인이 생성되었는지 여부와 관계없이 모든 행을 검색하면됩니다.

... 이러한 기능은 비교적 쉽게 복제 할 수 있습니다. 쿼리를 실행하여 모든 제목을 가져 와서 단어로 분할하고 결과를 합산합니다.


하지만, 아마도 당신은 스핑크스와 같은 efficident 할 stuggle 수 (일반적으로 꽤 스마트 개발자 있기 때문에 그게 전부 컴파일 된 C 프로그램). 그러나 야간 배치 프로세스로 실행할 수있는 경우 버전이 얼마나 느리고 까다 롭지는 않습니다. 사용될 수있다 (이 색인 결코 극복 즉)


효율성이 중요하다면, 가짜 스핑크스 인덱스를 만들 수

예를 들어, 한 행에 특별한 테이블을 생성 - CATEGORY_ID합니다. 인덱스 그

sql_query = SELECT id, title FROM table INNER JOIN sphinx_category USING (category_id) 

후 작은 스크립트

<?php 
$cats = getCol("SELECT category_id FROM categories"); 
foreach ($cats as $cat) { 
    query("UPDATE sphinx_category SET category_id = $cat"); 
    `indexer --buildstops filtered_index > words$cat.txt`; 
} 
(A 표 스핑크스 인덱스 '변수'를 통과 단지 해키 방법) 결과를 필터링하는 데 사용