복붙노트

[SQL] LIKE 대 전체 텍스트 검색 무엇입니까

SQL

LIKE 대 전체 텍스트 검색 무엇입니까

난 그냥 SQL에서 "전체 텍스트 검색"을 언급 게시물을 읽어 보시기 바랍니다.

난 그냥 FTS와 LIKE의 차이가 무엇인지 궁금했다. 나는 기사의 몇 가지를 읽었다하지만 잘 설명 아무것도 찾을 수 없습니다.

해결법

  1. ==============================

    1.일반적으로, "정밀도"와 "리콜"사이에 상충 관계가있다. 적은 관련성이없는 결과가 나타난 고정밀 수단 (오 탐지없이), 높은 리콜 수단은 적은 수의 관련 결과가 누락되는 동안 (아무 위음성). 에서 LIKE 연산자를 사용하면 당신에게 리콜에 대한 어떤 양보와 100 %의 정밀도를 제공합니다. 전체 텍스트 검색 기능은 더 나은 리콜에 대한 정밀 아래로 조정하는 많은 유연성을 제공합니다.

    일반적으로, "정밀도"와 "리콜"사이에 상충 관계가있다. 적은 관련성이없는 결과가 나타난 고정밀 수단 (오 탐지없이), 높은 리콜 수단은 적은 수의 관련 결과가 누락되는 동안 (아무 위음성). 에서 LIKE 연산자를 사용하면 당신에게 리콜에 대한 어떤 양보와 100 %의 정밀도를 제공합니다. 전체 텍스트 검색 기능은 더 나은 리콜에 대한 정밀 아래로 조정하는 많은 유연성을 제공합니다.

    대부분의 전체 텍스트 검색 구현은 "역 색인"을 사용합니다. 이는 키가 개별 용어이다 지표이며, 값 관련 용어를 포함하는 레코드 세트이다. 전체 텍스트 검색이 기록 세트 등 교차로, 조합을 계산하기 위해 최적화되어 있으며 일반적으로 주어진 레코드 일치 키워드를 검색하는 방법을 강력하게 정량화하는 순위 알고리즘을 제공한다.

    는 SQL LIKE 연산자는 매우 비효율적 일 수 있습니다. 당신은 않은 인덱스 컬럼에 적용하면, 전체 스캔 (다만 않은 인덱스 필드에있는 모든 쿼리 등) 일치를 찾는 데 사용됩니다. 열이 인덱싱 된 경우 일치 인덱스 키에 대해 수행하지만, 대부분의 인덱스 조회보다 훨씬 덜 효율적으로 할 수있다. 최악의 경우, LIKE 패턴을 검사 할 때마다 인덱스 키가 필요 선도 와일드 카드를해야합니다. 반면에, 많은 정보 검색 시스템은 선택한 필드에서 사전 컴파일 접미사 나무 와일드 카드를 선도에 대한 지원을 활성화 할 수 있습니다.

    일반적으로 전체 텍스트 검색의 또 다른 특징은

  2. ==============================

    2.빠른 많은 레코드를 검색 할 수 있도록하기 위해 FTS는 텍스트 필드 내의 개별 단어를 색인이 포함됩니다. LIKE를 사용하는 것은 여전히 ​​필드에서 문자열 (선형 또는 같은) 검색을 수행 할 필요합니다.

    빠른 많은 레코드를 검색 할 수 있도록하기 위해 FTS는 텍스트 필드 내의 개별 단어를 색인이 포함됩니다. LIKE를 사용하는 것은 여전히 ​​필드에서 문자열 (선형 또는 같은) 검색을 수행 할 필요합니다.

  3. ==============================

    3.MySQL은이 인덱스에 활성화 된 전체 텍스트 검색 열 및 수행 검색의 말에서 인덱스를 생성합니다. MySQL은 검색 쿼리에 일치하는 행을 결정하기 위해 정교한 알고리즘을 사용합니다.

    MySQL은이 인덱스에 활성화 된 전체 텍스트 검색 열 및 수행 검색의 말에서 인덱스를 생성합니다. MySQL은 검색 쿼리에 일치하는 행을 결정하기 위해 정교한 알고리즘을 사용합니다.

    또한,이 SO 답변에서 :

  4. ==============================

    4.사용과 마찬가지로 와일드 카드 만 모든 것을 강력하지 않다.

    사용과 마찬가지로 와일드 카드 만 모든 것을 강력하지 않다.

    전체 텍스트가, 훨씬 더 복잡한 검색을 할 수 있습니다 포함하여 그리고, 나 말거나, 심지어 비슷한 소리가 나는 결과 (SOUNDEX) 그리고 더 많은 항목.

    나는 가능한 것이 무엇인지의 이해를 더 잘 활용할 수 있도록 도와주는 SQL CONTAINS () FREETEXT () 및 관련 전체 텍스트 검색 항목을보고 시작합니다.

  5. ==============================

    5.실제 차이는 스캐닝 방법이다. 전체 텍스트 검색의 경우, 단어 (용어) 해시 키로 사용됩니다 - 그 각각이 문서의 배열 키 (용어)이 같은 그것의에 나타납니다와 연결되어 있습니다. :

    실제 차이는 스캐닝 방법이다. 전체 텍스트 검색의 경우, 단어 (용어) 해시 키로 사용됩니다 - 그 각각이 문서의 배열 키 (용어)이 같은 그것의에 나타납니다와 연결되어 있습니다. :

    Document sets = {d1, d2, d3, d4, ... dn}
    Term sets = {t1, t2, t3, .. tn}
    

    이제 용어 - 문서 행렬 (용어 부재하는 문서)로 표현 될 수있다 :

    t1 -> {d1, d5, d9,.. dn}
    t2 -> {d11, d50, d2,.. dn}
    t3 -> {d23, d67, d34,.. dn}
    :
    tn -> {d90, d87, d57,.. dn}
    

    요청이 요구에 올 때 "나에게 단어 / 용어 (T1)가 포함 된 모든 문서 가져 오기"- 다음 문서 세트 {D1, D5, D9을 .. DN}이 반환됩니다.

    당신은 문서를 저장에 드 정규화 된 테이블 스키마를 해킹 할 수 - MySQL의 테이블의 각 행이 "문서"등의 해시 키와 같은 약관 및 행 ID를 포함 할 역 색인 단락을 포함 할 수있는 TEXT 컬럼으로 간주됩니다 문서 식별자로.

    이 SQL 쿼리가 더 많거나 적은 O (1) 성능있을 것이라는 점을 기억하십시오. 쿼리는 독립적이어야합니다

    예를 들어이 SQL은 주어진 단어의 XYZ 일치하는 모든 행을 추출하기 위해 해고 될 수있다 :

    SELECT * 
    FROM   my_table 
    WHERE  MATCH (my_text_column) against ('XYZ' IN boolean mode) ;
    

    경고 :이 쿼리에 ORDER BY를 추가 할 경우, 런타임이 일치하는 행 / 문서의 수는 하나의 여러 매개 변수에 따라 달라질 수 있습니다. 그래서 조심.

    등 그러나이 전혀 없어했다. 선형 문장 / 문자열을 검색하여 일치하는 모든 조건을 찾기 위해 강제로. 와일드 카드를 추가하면 혼란에 추가합니다. 당신이 상상할 수 있지만, 더 이상 문장을 위해 비참하게 실패로 그것은 작은 길이 문자열 위대한 작품. 그리고 확실히 비교할 수 없습니다 단락 또는 텍스트 등의 전체 페이지를 가진 경우

  6. ==============================

    6.FTS (특히 단어 분리기 및 형태소 분석 기능에 대한) 강력한, 더 효율적입니다  예를 MSSQL이 페이지 http://msdn.microsoft.com/en-us/library/ms176076(v=sql 그리스어 (확인을 지원하지 않습니다 때로는의 DB를 모든 언어를 지원하지 않기 때문에 ...하지만 당신의 요구 사항을 확인 0.110)에서 .aspx)

    FTS (특히 단어 분리기 및 형태소 분석 기능에 대한) 강력한, 더 효율적입니다  예를 MSSQL이 페이지 http://msdn.microsoft.com/en-us/library/ms176076(v=sql 그리스어 (확인을 지원하지 않습니다 때로는의 DB를 모든 언어를 지원하지 않기 때문에 ...하지만 당신의 요구 사항을 확인 0.110)에서 .aspx)

  7. from https://stackoverflow.com/questions/224714/what-is-full-text-search-vs-like by cc-by-sa and MIT license