MySQL 5.5.22의 여러 테이블에서 전체 텍스트 쿼리를 실행하고 있습니다. 이 응용 프로그램은 innodb 테이블을 사용하므로 전체 텍스트 검색을위한 MyISAM 테이블을 만들었습니다. 이 테이블은 단독으로 전체 텍스트 검색, 그들이 정규화되어 있습니다으로많은 테이블에서 MySQL의 전체 텍스트 검색으로 가장 관련성 높은 결과 수집
예를 들어, 내 테이블 중 일부는
account_search
===========
id
account_id
name
description
hobbies
interests
product_search
===========
id
product_id
name
type
description
reviews
처럼 보인다. 데이터는 여러 테이블에서 올 수 있으며 검색 테이블에 집계됩니다. ID 열 외에 나머지 열은 1 전체 텍스트 인덱스에 할당됩니다.
전체 텍스트 검색에서 "50 %"규칙을 해결하려면 IN BOOLEAN MODE
을 사용하고 있습니다.
따라서 위, 나는 실행됩니다 : P
내가 직면하고 문제를 다음과 같습니다 :
SELECT *, MATCH(name, type, description, reviews) AGAINST('john') as relevance
FROM product_search
WHERE MATCH(name, type, description, reviews) AGAINST('john*' IN BOOLEAN MODE) LIMIT 10
SELECT *, MATCH(name, description, hobbies, interests) AGAINST('john') as relevance
FROM account_search
WHERE MATCH(name, description, hobbies, interests) AGAINST('john*' IN BOOLEAN MODE) LIMIT 10
는 그냥 우리가뿐만 아니라 "존"이라는 제품이 있다고 가정하자
의미있는 관련성을 얻으려면 IN BOOLEAN MODE
없이 검색해야합니다. 즉, 검색에 50 % 규칙 및 단어 길이 규칙이 적용됩니다. 따라서 매우 자주 product_search
테이블에있는 제품의 대부분이 john
이라면 해당 관련성은 0으로 반환됩니다.
여러 쿼리 간의 관련성은 비교할 수 없습니다. (한 쿼리의 14의 관련성이 다른 쿼리의 14의 관련성과 같지 않음)
검색 그냥이 두 테이블에 국한되지 않습니다
내가 수 있도록하고 싶습니다 키워드 세트 (1 개의 검색 상자는 모든 오브젝트에 대한 결과를 리턴 함)를 가진 ALL 오브젝트 유형의 가장 관련성이 높은 결과 7 개를 리턴합니다.
위에서 알 수 있듯이, 상위 7 개를 얻으려는 알고리즘이나 아이디어는 무엇일까요?
나는 solr 및 elasticsearch와 같은 것을 사용할 수 있음을 알고 있으며, 이미 응용 프로그램에 통합하는 과정에서 이미 시도했지만 MySQL에 대한 액세스 권한 만 가진 사용자를 검색 할 수 있기를 바랍니다. .