2010-06-15 4 views
0

제가 제품 세부 사항이있는 테이블이 있다고 가정하십시오. 필드 중 하나가 범주 (정수)입니다.mysql 전문 검색 수준 2 색인

특정 범주의 제품 이름에 대한 전문 검색을 수행하고 싶습니다.

아쉽게도 Mysql에서는 카테고리 및 제품 이름을 전체 텍스트로 포함하는 색인을 지정할 수 없습니다. product_name에서만 전체 텍스트를 사용할 수있는 것처럼 보이기 때문에 모든 전체 텍스트 검색은 모든 카테고리에서 제품 이름을 검색합니다.

문제를 해결할 수있는 방법이 있습니까? (카테고리의 제품에만 전체 텍스트 검색/색인 허용)?

답변

1

이것은 가능하지 않습니다. MyIsam의 전체 텍스트 검색은 매번 전체 텍스트 인덱스를 검색하지만 SQL 쿼리에 WHERE 조건을 추가하여 범주에없는 결과를 필터링 할 수 있습니다 너는 검색하고 싶었다.

0

기능적 관점에서 제품 이름에 대한 전체 텍스트 검색을 수행하고 where 절에서 카테고리별로 필터링 할 수도 있습니다.

select id,product_name 
from product_detail 
WHERE category = 17 
AND match(product_name) against('+foo*' IN BOOLEAN MODE); 

성능을 최적화하려는 경우 별도의 열이나 테이블을 사용하여 각 범주의 제품 이름에 대해 별도의 전체 텍스트 색인을 만들 수 있습니다. 예를 들어 product_name_cat1, product_name_cat2 등의 열/테이블 이름을 가질 수 있습니다. 그런 다음 카테고리를 기반으로 적절한 열/테이블을 사용하도록 검색 쿼리를 동적으로 작성해야합니다. 이렇게하면 각 전체 텍스트 색인이 모든 범주의 모든 제품 이름을 포함하는 결합 된 색인보다 작기 때문에 어느 정도 성능이 향상됩니다.

select id,product_name 
from product_detail 
WHERE category = 17 
AND match(product_name_cat17) against('+foo*' IN BOOLEAN MODE);