2016-06-06 5 views
1

근무 다소 작업 인이 함께했다 :SQL 전체 텍스트 쿼리에만 나는 그래서 나는 종류의 관련성</strong>으로 분류 SQL 쿼리 <strong>주위를 봤 전체 텍스트 검색에 대한 전문가가 아니에요 첫번째 키워드

SELECT *, MATCH(fulltext_tags) AGAINST ('+blue' '+red') AS relevance FROM `products` WHERE MATCH(fulltext_tags) AGAINST ('+blue' '+red' IN BOOLEAN MODE) ORDER BY relevance DESC 

문제는 첫 번째 키워드 만 고려한 것입니다. 은 완전히 '+ 빨간색'두 번째 키워드를 무시, 나는이 제품 테이블

+----------+------------------+ 
| name | fulltext_tags | 
+----------+------------------+ 
| Product1 | Blue    | 
| Product2 | Red    | 
| Product3 | Blue Red   | 
| Product4 | Yellow   | 
+----------+------------------+ 

위의 쿼리는 제품 1을 반환하고 3 말해봐. + Yellow를 세 번째 키워드로 추가하더라도 첫 번째 키워드를 무시하므로 무시합니다.

+ 파랑 및 + 빨강이 포함 된 쿼리를 사용하면 Product1 Product2 및 Product3이 하나 이상 반환됩니다. 두 키워드가 fulltext_tags 필드에서 계산됩니까?

감사

+0

참조 단어 3를 무시 글자는 길거나 작다. – Barmar

+0

중복을 제거하십시오.이 질문의 대답은 검색어에 사용 된 3 자 키워드 "red"와 아무 관련이 없습니다. 나는 Yellow를 사용해도 여전히 작동하지 않으므로 3 글자 키워드가 문제가되지 않는다고 구체적으로 언급했다. – Flames

답변

1

당신은 정확한 단어를 찾기위한 REGEXP '[[:<:]]Red[[:>:]]'을 사용하므로 쿼리 아래 시도해야는 일을하고 귀하의 요구 사항을 충족 바랍니다.

SELECT * FROM `products` 
    WHERE fulltext_tags REGEXP '[[:<:]]Red[[:>:]]' 
    OR fulltext_tags REGEXP '[[:<:]]Blue[[:>:]]'; 

DEMO Here입니다. 업데이트 1

난 당신이 이런 일을하고 싶지 관찰 할 수 있듯이,이 쿼리

,

SELECT *, 
     MATCH(fulltext_tags) AGAINST ('+blue' '+red')  
     AS relevance FROM `products` 
    WHERE MATCH(fulltext_tags) AGAINST('Red') 
     OR MATCH(fulltext_tags) AGAINST('Blue') 
    ORDER BY relevance DESC 

기본 전체 텍스트 인덱싱하여 여기 ONLINE DEMO

+0

안녕하세요, 이것은 여전히 ​​불투명합니다.()에 대한 match()가있는 관련성 높은 쿼리 만 관련성에 따라 결과를 반환합니다 ... – Flames

+0

@Flames, SQLFiddle로 답변을 업데이트 했으므로 한 번 확인하십시오. –

+0

대단히 감사합니다! 나는 이것을 시도하고 다시 당신에게 돌아갈거야! – Flames