문제

나는 데이터베이스 전체의 아시아 문득 기록(중국,일본어,한국어)가진 사람들과 함께 라틴 문자로 채워진 레코드(영어,프랑스어,당신은 그것),나를 수행하려는 전체 텍스트 검색니다.

MySQL 을 말한다:

표의 문자와 같은 언어 중국 일본어 있지 않은 단어 구분 기호.따라서,FULLTEXT 파서 위치를 확인할 수 없습니다 말 시작과 끝에서 이러한과 같은 다른 언어입니다.의 의미를 이 일부 문제에 대한 해결 방법 섹션에 설명되어 11.8, "전체 텍스트 검색 기능을".

섹션 11.8 실제로 제공하지 않습 해결 방법이나 문제입니다.

그래서, 어떻게 정렬 검색에 대한 하나의 캐릭터 중국에서 문자 데이터베이스? %LIKE% 지만,그것을 가지지 않는 멋진 관련성 평가.어야 나는 단지 세 시간이 문자가 나타납에서 기록과 순위는?내가 감사한 조언이있다.감사합니다!

도움이 되었습니까?

해결책

그것의 크기에 따라 달라집니합니다.만약 우리가 얘기 백의 수천의 행,나는 아마도 살펴 하나의 우수한 독립적인 전체 텍스트 검색 솔루션을 제공합니다.나는 실제로 적이 이 문제를 해결하기 위하여 mysqlf,그래서 나는 확실하지 않다는 솔루션에 대한 지원을 포함하는 아시아 언어입니다.

그러나 알고 있는 루씬 스포츠 분석기 위해 중국,일본어,한국어,그래서 내 생각은 그것이 어떤 종류의 지원을 위해 당신이 무엇을하고있다.What I usually do when I 을 통합하는 데 필요한 루씬 php 구현하는 루씬 소켓 서버에서 연결하 php.

는 경우에 데이터 집합이 충분히 작은,그것은 옵션을 수 있습을 자신의 롤 ad-hoc 접근 방식이다.거기에는 두 부분이 이 문제는:검색 문서의 순위하고,실제 순위가 있습니다.거기에 여러 가지 방법을 불러올 수 있습니다.수처럼 사용하는 경우,데이터 집합이 충분히 작습니다.다른 수 있습을 자신의 롤스 디스크 기반의 인덱스 구조,될 수 있지만 오히려 복잡하고 시간이 소요됩니다.사용할 수도 있습 MySQL 중간 경로를 아래에서 설명합니다.

을 구현하기 위해서는 인덱스 구조를 사용하여 MySQL,당신은 당신을 만들어야 몇 가지 테이블은 다음과 같이 구성됩니다.

document
  document_id
  document_text
  document_tokencount

document_token
  document_id
  token_id
  token_docfrequency
  index (token_id, document_id)

token
  token_id
  token_unicode
  token_globalfrequency
  index (token_unicode)

그때 나는 프로세스는 각 문서에 삽입하는 행 document_token 테이블을 각각 문자(토큰)에서 문서입니다.이 token_unicode 분야가 포함될 것입 정수 유니코드는 데 사용되는 시퀀스를 referr 이 문자입니다.이 token_docfrequency 필드가 포함되어 있는 정수에 해당하는 횟수를 포함된 문서는 토큰하면서,token_globalfrequency 필드를 포함한 총 횟수는 용어가 사용되는 모든 문서입니다.

이 것이라 할 수 있도록 빠른 검색을 위한 토큰:

SELECT * FROM document_token WHERE token_id = 1
UNION
SELECT * FROM document_token WHERE token_id = 2
UNION
SELECT * FROM document_token WHERE token_id = 3

(연합 접근 방식은 해킹할 수 있는 mysql 을 활용하는 인덱스에 대한 모든 선택,그리고 가장 가능성이보다 빠른 것이 해당 쿼리를 사용하는 단일 선택하고 여러 또는 진술)

이것은 우리와 관련 순위로 나머지는 문제입니다 당신이 정말로 물었습니다.:) 이로 할 수 있습니다 오히려 좋은 결과를 활용하여 벡터 공간이 모델(VSM).

검색을 수행한 후에 첫 번째 것은 당신이 해야 할 것을 계산하는 tf-idf 점수에 대한 이습니다.이것은 공식을 사용:

tf-idf = tf(t,d) / tf(d) * log(D / d(t))

where:
tf(t,d) = token frequency in current document
tf(d) = total number of tokens in current document
D = total number of documents
d(t) = number of document that contains the token

이 계산에 대한 점수를 각각기에서 검색 질 첫째로,그리고 저장소에서 결과 hashmap 또는 무언가를 바랍니다이것은 당신의 첫 번째 벡터,라 v_1.를 진행하는 첫 번째 문서입니다.계산 tf-idf 점수를 각 용어에 대한 문서 뿐만 아니라,그리고 상점으로 v_2.지금 당신은 계산할 수 있는 점수에 대한 이를 사용하여 문서 코사인 similiarity:

score = arccos(v_1 * v_2 / (|v_1| * |v_2|))

그 결과 값을 사용할 수 있는 순위를 문서입니다.계속하고 이에 대한 모든 문서입니다.정렬이 그들에 내림차순으로.첫 번째 목록에서 문서를 가장 관련성이 될 것입니다.

이 모든 소리는 조금 복잡,하지만 당신은 몇 가지 기본적인 이해의 선형 대수,당신은 아마 생성 작업 솔루션에서 몇 시간입니다.여전히,가능한 모든 경우에 사용,기존 솔루션 같은 루씬.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top