처음이 아니라 문자열의 중간을 검색 할 때 호출되는 것은 무엇입니까?


19

동료 개발자와 더 잘 소통 할 수 있도록 어휘를 다듬 으려고합니다. 우리는 사이트에서 문자열의 시작 'running%'과 문자열의 어느 곳에서나 문자열을 검색해야하는지 토론 할 곳이 몇 군데 있습니다 '%running%.

나는 퍼지 가 단어 "run", "runing"[sic], "runed"[sic]의 형태를 바꾸는 것을 의미 하므로 중간 검색을 "퍼지" 라고 부릅니다.

문자열의 시작 부분을 검색하고 문자열의 중간 부분을 검색하는 올바른 용어는 무엇입니까?


1
나는 "Begins with"와 "Contains"를 사용하여 두 옵션을 구분하는 곳에서 일했습니다.
Solomon Rutzky

답변:


24

그것은는라고 "해제 고정 된 검색 패턴" , 그리고 SQL에 다음과 같습니다.

foo LIKE '%bar%'

%양쪽에 부족한 경우 검색 패턴이 각각 문자열의 시작 또는 끝에 고정 되어 있다고합니다 . 이 용어는 정규식 세계에서 나옵니다.

foo LIKE 'bar%'

"검색 패턴 bar%이 문자열의 시작 부분에 고정되어 있습니다 " 라고 말합니다 .

비교를 들어, PCRE는 함께 정박 ^또는 $토큰과는 모양 ^bar이나 bar$. PCRE에는 토큰을 사용한 명시 적 앵커링이 필요한 반면, SQL LIKE문은 내재적으로 앵커되며 "고정되지 않은 검색 패턴"% 을 작성 하려면 명시 적이어야합니다 .

참고 로 PostgreSQL 과 같은 것을 사용하여 이러한 유형의 표현식을 트라이 그램으로 색인화 할 수 있습니다pg_trgm


1

나에게 가장 먼저 떠오르는 것은 " 비수용 불가 "입니다. 색인화 된 필드에서 특정 문자열 또는 문자열의 첫 부분을 검색하면 검색 할 수 있습니다. 검색이 와일드 카드로 시작하는 경우 RDBMS는 검색 술어를 만족하는 값이 값 세트의 어느 곳에 나 나타날 수 있으므로 전체 색인을 스캔해야합니다.

전화 번호부를 살펴보십시오 (연령을 기억할만큼 나이가 들면 ...). "Dan :"으로 시작하는 성을 쉽게 찾을 수 있습니다. D는 엄지 손가락으로 엄지 손가락을 댄 다음 DA로 넘어 가면 DAN이 함께 있습니다. 성이 "ANIEL"인 성을 찾는 사람을 찾으려면 모든 페이지를 읽어야합니다 (테이블 스캔).


2
"RDBMS는 전체 인덱스를 스캔해야합니다"는 사실이 아닙니다. postgresql.org/docs/9.6/static/pgtrgm.html
Evan Carroll

나는 많은 다른 경우 (예를 들어 열에서 수행 된 함수의 결과 검색)를 다루기 때문에 여기서 찾기보다 더 일반적인 용어 일 수 있다고 생각합니다.
David Spillett

0

실제로 귀하의 질문은 아니지만 퍼지의 예가 정확하지 않습니다.

  • Fuzzy는 sharp, binary 와 반대입니다. 예를 들어 'run'정밀도가 .5 인 퍼지 검색 에는 'ran', 'rud'및 기타 많은 단어가 포함됩니다. SQL은 퍼지 검색을 지원 하지 않으므로 Lucene과 같은 추가 시스템이 필요합니다.
  • A는 와일드 카드 에 대한 의지를 검색 'run%'항상 '룬'들이받은 '를 포함, 당신은 구별 할 수 있습니다 시작포함 ( '%run%'@로'제치고 '포함) 솔로몬 Rutzky가 제안
  • 그러나 당신이 찾으려면 전체 단어 텍스트 블록에 예를 들어, 당신은 선행 또는 후행 공백을 표시해야합니다 ' run '(또는 ' run% '같은 '어쩌구 저쩌구들이받은 즐'과 '즐 룬문자 어쩌구 저쩌구'등의 부분 일치를 포함).
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.