programing

mysql 전체 텍스트 검색 오른쪽 색인

topblog 2023. 8. 6. 09:06
반응형

mysql 전체 텍스트 검색 오른쪽 색인

자리가 있다고 치자posts다음 열과 함께:top_totle,title,sub_title,text

이 모든 열에 대한 전체 텍스트 검색을 수행하고 top_title이 title 등보다 더 중요한 관련성별로 정렬해야 합니다.

그래서 저는 동일한 두 가지 질문이 있습니다. 이것에 대한 인덱스를 만드는 가장 좋은 방법은 무엇이며 이 인덱스를 가장 잘 지원하기 위해 쿼리를 포맷하는 방법은 무엇입니까?

인덱스 옵션:이 열의 전체 텍스트 색인을 모두 만들거나 각 열의 색인을 별도로 작성할 수 있습니다.

어떤 것이 선호되는 방법입니까?옵션 1:

SELECT
  title,
  MATCH (top_title) AGAINST ('text' IN BOOLEAN MODE) as toptitle_score,
  MATCH (title) AGAINST ('text' IN BOOLEAN MODE) as title_score,
  MATCH (sub_text) AGAINST ('text' IN BOOLEAN MODE) as sub_text_score,
FROM
  `posts`
WHERE
  MATCH (top_title,title , sub_text ) AGAINST ('text' IN BOOLEAN MODE)
  and `posts`.`deleted_at` IS NULL
  AND `published_at` IS NOT NULL
Order by toptitle_score desc, 
Order by title_score desc , 
Order by subtext_score desc

옵션 2:

SELECT
  title,
  MATCH (top_title) AGAINST ('text' IN BOOLEAN MODE) as toptitle_score,
  MATCH (title) AGAINST ('text' IN BOOLEAN MODE) as title_score,
  MATCH (sub_text) AGAINST ('text' IN BOOLEAN MODE) as sub_text_score,
FROM
  `posts`
WHERE
  (MATCH (top_title) AGAINST ('text' IN BOOLEAN MODE)
  or MATCH (title) AGAINST ('text' IN BOOLEAN MODE)
  or MATCH (sub_text) AGAINST ('text' IN BOOLEAN MODE))
  and `posts`.`deleted_at` IS NULL
  AND `published_at` IS NOT NULL
Order by toptitle_score desc, 
Order by title_score desc , 
Order by subtext_score desc

옵션 3:

is there some smarter way?

옵션 1이 좋습니다.4개의 FT 인덱스(열당 하나씩, 3개의 열이 모두 포함된 하나씩).반복 안 함ORDER BY:

ORDER BY toptitle_score DESC , 
         title_score    DESC , 
         subtext_score  DESC

옵션 2는 실행 가능한 경쟁자가 아닙니다.3개의 인덱스만 필요하지만(별로 절약되지 않음), 이로 인해 훨씬 느립니다.OR.

옵션 3...(옵션 1, 고정됨, 더하기...)

ORDER BY당신이 사용하고 있는 것은 아마도 당신이 원하는 것에 대해 "순수"한 것일 것입니다.예를 들어, 다음 행이 없는 경우 목록의 끝으로 이동합니다.texttoptitle아마도 당신은 "가중된" 버전을 원할 것입니다.

ORDER BY
   9 * top_title_score  +
   3 * title_score      +
   1 * sub_text_score  DESC

(9,3,1은 다소 임의적입니다.만약에 'text'가 3번 이상 나타나면,title그것은 한 번 나타나는 것보다 더 중요합니다.top_title또는 그와 비슷한 것.)

언급URL : https://stackoverflow.com/questions/44460470/mysql-full-text-search-right-index

반응형