SELECT 문의 전체 섹션에 대해 점수를 얻으려고합니다.
SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
이 경우 점수는 테이블 당 + 관련성에 따라 정렬되지 않습니다.
그러나 나는이 방법을 시도했지만 작동하지만 생산 가치는 없습니다.
SELECT * FROM (
SELECT *,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
) as `combined` ORDER BY `score` DESC
위의 코드는 테이블 당 점수가 있기 때문에 싫어하며 결합되어 정렬됩니다. 나쁜 접근법.
그래서 난에 노력 MATCH() AGAINST()
을 위해 data
잘으로 TOP의 LEVEL SELECT. (작동하지 않음)
SELECT *,MATCH(`data`) AGAINST('keyword') as `good_score` FROM (
SELECT *,`result` as `data`,MATCH(`result`) AGAINST('keyword') as `score` FROM `table1` WHERE MATCH(`result`) AGAINST('keyword')
UNION
SELECT *,`content` as `data`,MATCH(`content`) AGAINST('keyword') as `score` FROM `table2` WHERE MATCH(`content`) AGAINST('keyword')
UNION
SELECT *,`text` as `data`,MATCH(`text`) AGAINST('keyword') as `score` FROM `table3` WHERE MATCH(`text`) AGAINST('keyword')
) as `combined` ORDER BY `good_score` DESC
위의 진술은 나에게 완벽하지만 data
열이 즉시 생성되고 FULLTEXT INDEX를 지원하지 않기 때문에 작동하지 않습니다.
내 질문은 엔진을 작동시키는 방법입니다.
- 어떻게 든
data
전체 텍스트를 만들 수 있습니까 - 점수를 지원하지 않는 IN BOOLEAN 모드 이외의 다른 방법으로 작동합니까?
- 이 전체 주제에 대한 접근 방식이 있습니까? 임시 테이블을 생성해도 문제가 해결되지 않습니다. MATCH ()의 50 % 규칙 AGAINST ()는 쿼리에서 0 개의 결과를 반환하지만
- 어쩌면 내가 놓친 것이 있습니까?
- VIEW 생성도 작동하지 않으며 MySQL은 VIEW에서 INDEX-es를 지원하지 않습니다.
- IN BOOLEAN MODE를 사용하고 수동으로 스코어링을 생성하는 것이 좋습니다.
이 문제를 해결하기 위해 이틀 이상 일했습니다. 그래서 친절하게 도움을 요청합니다. 감사.