2017-10-15 1 views
0

그래서 이러한 쿼리가 비어 있지 않은 집합을 반환 할 것 : 유일한 레코드의 이름 속성이 'some_text'있는 테이블에서InnoDB에서 밑줄 문자를 별도의 단어로 취급하는 이와 같은 전체 텍스트 색인을 어떻게 만들 수 있습니까?

SELECT * FROM mytable WHERE MATCH(name) AGAINST ('+some +text' IN BOOLEAN MODE);

합니다. 기본적으로 InnoDB는 닷이나 하이픈을 사용하는 것처럼 전체 텍스트 인덱스를 작성할 때 밑줄을 구분 기호로 취급해야합니다. 어떻게 이것을 mysql 또는 기본적으로 이것을 가지고있는 제 3 자 파서와 함께 사용할 수 있습니까? 감사합니다.

편집 : 가장 쉬운 방법은 열을 복제하여 원하는대로 단어를 분리하고 색인을 작성하는 것이지만, 필요하지 않으면 그렇게하지 않을 것입니다. 테이블에 수백만 개의 행이 있습니다.

답변

0

단어를 정의하는 문자를 변경하려고합니다. 찾으려는 곳은 documentation에 있으며 검색을 미세 조정합니다. 특히 단어에서 허용되는 문자를 제어하려는 경우 - _을 단어가 아닌 문자로 지정하려는 경우 - 단어 문자로

당신이 ('') 하이픈 문자를 처리한다고 가정 :

한 권장 방법은 문자 집합 파일을 수정하는 것입니다. 다음 방법 중 하나를 사용하십시오.

. . .

  • 문자 집합 파일 수정 :이 경우 다시 컴파일 할 필요가 없습니다. true_word_char() 매크로는 "문자 유형"테이블을 사용하여 글자와 숫자를 다른 문자와 구별합니다. . 문자 집합 XML 파일 중 하나의 배열 을 으로 편집 할 수 있습니다. '-'는 "문자"입니다. 그런 다음 FULLTEXT 색인 에 주어진 문자 집합을 사용하십시오. 배열 형식에 대한 자세한 내용은 10.3.1 절. "문자 정의 배열"을 참조하십시오.

유일한 단점은 모든 전체 텍스트 색인에 영향을 미친다는 점입니다.

다른 방법으로 밑줄을 공백으로 대체하고 두 번째 열에 공백 색인을 작성하는 것입니다.

인덱스 별 접근 방식을 원할 경우 다른 옵션은 자신의 데이터 정렬을 정의하는 것입니다.

참고 : 최소 단어 크기에주의해야 할 수도 있습니다. 기본값은 3 또는 4입니다. 작은 단어는 무시됩니다.

관련 문제