2017-02-04 2 views
0

자연어 모드에서 AND 연산자를 사용하여 InnoDB 엔진에서 전체 테스트 검색을 사용할 수 있습니까?MySQL 전체 텍스트 검색 AND 연산자

SELECT *, MATCH (body) AGAINST ('mysql database') AS score FROM post ORDER BY score DESC; 

을 내가 두 단어와 일치하는 모든 레코드를 반환하려면이 쿼리의 경우 : 'mysql을'AND '데이터베이스'나는 아래와 같이하지만, 필요에 따라 모든 단어와 쿼리 의미한다. 난 내가 +와 BOOLEAN 모드를 사용할 수 있습니다 알고 있지만, 내가 무시하고 싶지는 다른 사업자와 같은 다른 문제가 발생 (* - ' "를 ..)

+0

두 단어가 일치하면 점수가 높아야합니까? – Barmar

+0

@Barmar 더 나은 성능을 위해 모든 단어가 일치하는 점수 만 반환하고 점수는 해당 레코드에 대해서만 계산해야합니다. – jgr

+0

그렇다면 '+'와'BOOLEAN MODE'. –

답변

1

개별적으로 각각의 단어에 대해 테스트하는 WHERE 절을 추가

SELECT *, MATCH (body) AGAINST ('mysql database') AS score 
FROM post 
WHERE MATCH(body) AGAINST ('mysql') AND MATCH(body) AGAINST('database') 
ORDER BY score DESC; 
+0

나는 이것에 대해 생각했지만 성능은 어땠습니까? 쿼리는 3 ~ 10 단어로 구성되어 있습니다. BOOLEAN 모드에서는 성능이 더 좋을 것입니다. 점수 계산? 또한 쿼리 구문을 기반으로 동적으로 구문을 준비하는 것이 좋습니다. 예를 들어 나는 'java에서 개체를 json으로 구문 분석하는 방법'쿼리를 사용하여 JMeter에게 MySQL 쿼리를 전달합니다. – jgr

+0

부울 검색은 거의 확실하지만 더 좋을 것입니다. – Barmar

+0

부울을 사용하는 제한이 없다. 자연스러운 모드에서 어떤 식 으로든하는 것이 더 좋을 것이라고 생각했다. 왜냐하면 *와 같은 이상한 문자를 포함하고있는 쿼리가 있기 때문이다. 간단한 문자열로 취급하고 싶다. 부울 모드에서 쉽게 무시할 수 있습니까? AND 연산자를 사용하여 쿼리를 준비하고 특수 문자가 무시되는 사용자로부터 직접 받아 들인 구에 대해 (성능 테스트를하기 때문에) 최상의 성능으로 수행하면됩니다. – jgr