2012-11-09 2 views
1

하이픈이있는 검색 문자열에 문제가 있거나 오히려 이해 문제가 있습니다.MySQL에서 부 울린 모드의 예상치 못한 동작 - 인용 된 하이픈이있는 문자열이있는 쿼리

내 테이블에 '회사'열이있는 테이블이 있습니다. 해당 열에있는 항목의
하나는 : A-Z 전기 (실제 쿼리가 훨씬 더 복잡하지만) 다음 예는 많이 단순화

-하지만 효과는 여전히 동일합니다.

나는 다음 검색을 수행 할 때, 나는 위에서 언급 한 회사와 행을하지 않는다 : 나는 다음 검색을 수행하면

SELECT i.* 
FROM my_table i 
WHERE MATCH (i.company) AGAINST ('+\"A-Z\" +Electro*' IN BOOLEAN MODE) 
GROUP BY i.uid ORDER BY i.company ASC LIMIT 0, 40; 

는, 위에서 언급 한 회사와 행을 얻을 수 (주의 사항 만 변경

SELECT i.* 
FROM my_table i 
WHERE MATCH (i.company) AGAINST ('\"A-Z\" +Electro*' IN BOOLEAN MODE) 
GROUP BY i.uid ORDER BY i.company ASC LIMIT 0, 40; 
: 나는 완전히 연산자를 제거하면 나는 또한, 행을 얻을

SELECT i.* 
FROM my_table i 
WHERE MATCH (i.company) AGAINST ('-\"A-Z\" +Electro*' IN BOOLEAN MODE) 
GROUP BY i.uid ORDER BY i.company ASC LIMIT 0, 40; 

: A +에 "AZ \"을 \ 전 -

아무도 내게이 동작을 설명 할 수 있습니까? 내가 기대하기 때문에 +로 검색 할 때, 나는

편집

... 너무 결과를 얻어야한다 난 그냥 myisam_ftdump와 테이블 인덱스를 확인했습니다. 두 문자 - 단어
14f2e8 0.7908264 같은 항목이 깨어 있기 때문에 제대로 색인
3a164 0.8613265 DV

항목도있다 :
de340 0.6801047 AZ 나는이 AZ에 대한 항목해야 가정
가 - 검색에서이 항목을 찾아야합니다. 그렇지 않아야합니까?

답변

0

기본값은 ft_min_word_len입니다. 자세한 내용은 this link을 참조하십시오. 즉, 시스템에서 4 자 미만의 단어를 색인하지 않습니다.

왜 이것이 중요한가요? 음 :

  • A-Z는 따라서 인덱스
  • 에없는 ...
  • 긴 미만 4 자입니다 ...하지만 첫 번째 쿼리 +"A-Z"은 경기를 위해 인덱스에 있어야합니다 상태 성공하기 위해
  • 다른 두 (인덱스에없는 경우 일치,이 중 하나가 인덱스에있는 경우 일치)는 인덱스에 이 아니기 때문에이 아닙니다.

"A-Z"가 3 자이고 FT 색인이 무시하기 때문에 하이픈은 빨간색 청어입니다.

+0

@ "Jeremy Smith"죄송합니다. ft_min_word_len이 3으로 설정되었습니다. – Stefan

+0

색인을 3으로 설정 한 후 다시 작성 했습니까? –

+0

설정은 최근에 변경된 사항이 아닙니다.설정은 거의 1 년 이래로 2 (그리고 ft_stopword_file = '')로 설정되어 있습니다. 그 후 인덱스가 여러 번 재 빌드되고 MySQL 서버가 여러 번 재시작되었습니다. 위의 내 게시물을 업데이트했습니다 => 인덱스는 괜찮지 만 검색은 여전히 ​​일치하지 않습니다 ... 다른 아이디어? – Stefan

관련 문제