2014-06-22 3 views
1

저는 SphinxQL 2.1.1에 의해 색인 된 6 천만 개가 넘는 레코드가있는 데이터베이스를 가지고 있습니다. 각 레코드에는 제목과 catid가 있습니다 (다른 것들 중에서). 새 레코드가 데이터베이스에 삽입 될 때 스핑크스가 제목의 텍스트를 기반으로 catid를 추측하려고합니다.제목을 사용하여 SphinxQL에서 가능한 범주를 결정하십시오.

나는 그렇게처럼 하나의 단어에 대한 작업을 진행하게 처리했다 :

Looking for Landlords - Long term lease - No fees!!! 

그냥 덤프 할 수있는 방법이 있나요 : 실제 제목 가능성이 높습니다 그러나

SELECT @groupby, catid, count(*) c FROM sphinx WHERE MATCH('*LANDLORDS*') group by catid order by c desc 

은 다음과 같이 수 전체 제목 문자열을 스핑크스로 바꾸고 각 단어를 분해하고 일종의 퍼지 매치를 수행하여 가장 가능성있는 카테고리를 반환합니까?

답변

2

그런 스핑크스는 '마법 같은'것이 아니며 '퍼지 일치'기능이 없습니다.

하지만 최선을 만들려고 노력,

  • 순위 변경, 모든 '단어를'요구에서 변경
    1. 단지 일부를 필요로 하나 : 두 가지 주요 단계를 ..., 대략 수 질의와 제목 사이의 '교차점'은 높은 가중치를 얻으므로 맨 위에 '거품'이 생깁니다.

    최상의 결과를 얻고 '가장 좋은 추측'이 될 수 있습니까?

    (3 번째로 'for'와 'the'는 거짓 긍정을 유발하기 때문에 색인에서 불용어를 사용하거나 검색어에서 제외하고 싶을 수 있습니다.)

    이러한 쿼리의 프로토 타입이 일치하고 다른 열하 선택에 영향을 쿼럼을 사용

    SELECT catid FROM sphinx WHERE MATCH('"Looking Landlords Long term lease No fees"/1') OPTION ranker=wordcount LIMIT 1; 
    

    그게 전부 같은 수 있습니다.


    이 버전을 그룹과 함께 사용하면 낮은 품질의 일치 항목이 많이 포함되므로 쉽게 작동하지 않을 수 있습니다. perhap을 사용하여 평균을 사용하거나 합계를 사용하여 합성 가중치를 구할 수 있습니까? 당신은 예를 들어 matchany 다른 rankers을 시도 할 수 있습니다

    이를 조정할 수있는 방법이 많이 있습니다

    SELECT SUM(WEIGHT()) as w, catid FROM sphinx WHERE MATCH('"Looking Landlords Long term lease No fees"/1') GROUP BY catid ORDER BY w DESC OPTION ranker=wordcount LIMIT 1 
    

    .... 또는 심지어 일부 맞춤 순위 식.

    또는 쿼럼을 변경하십시오. 예를 들어, 1 단어가 필요한 순위가 아니라 적어도 몇 가지 결과가 발생할 수 있습니다.

    또는 구를 추출 할 수있는 경우 예 :

    ' "Looking Landlands"| "장기 임대"| '수수료 없음' '

    사용할 수 있습니까?

    또한 최상위 결과를 얻고 상위 5~10 개의 결과를 얻은 다음 사용자에게 모두 표시하여 결과가 매우 근접하다는 사실을 입증 할 수 있습니다.