문제

우리는 프로젝트에서 SQL Server 2005를 사용하고 있습니다.시스템 사용자는 '키워드'를 사용하여 일부 개체를 검색할 수 있습니다.이를 구현하는 방법은 이러한 '키워드'를 포함할 수 있는 각 테이블의 중요한 열에 대한 전체 텍스트 카탈로그를 만든 다음 CONTAINS를 사용하여 사용자가 해당 인덱스의 검색 상자에 입력한 키워드를 검색하는 것입니다.

예를 들어 Movie 개체가 있고 사용자가 기사의 제목과 본문에 있는 키워드를 검색할 수 있도록 하려면 Title과 Plot 열을 모두 색인화하고 다음과 같이 수행합니다.

SELECT * FROM Movies WHERE CONTAINS(Title, keywords) OR CONTAINS(Plot, keywords)

(실제로는 그보다 조금 더 발전했지만 그다지 복잡한 것은 아닙니다)

일부 사용자는 검색에 숫자를 추가하여 예를 들어 '터미네이터 2'를 찾고 싶어합니다.여기서 문제는 내가 아는 한 기본적으로 SQL Server가 짧은 단어를 색인화하지 않으므로 다음과 같은 검색을 수행한다는 것입니다.

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator 2"')

실제로 다음을 수행하는 것과 동일합니다.

SELECT * FROM Movies WHERE CONTAINS(Title, '"Terminator"') <-- notice the missing '2'

그리고 우리는 수많은 가짜 결과를 얻고 있습니다.

SQL Server가 작은 단어를 색인화하도록 하는 방법이 있습니까?바람직하게는 색인만 작성하는 것이 좋습니다. 숫자 1, 2, 21 등과 같은색인 작성 기준을 어디에서 정의해야 할지, 심지어 그렇게 구체적으로 정의하는 것이 가능한지도 모르겠습니다.


글쎄요, 제가 그렇게 해서 목록에서 "잡음 단어"를 제거했습니다. 이제 동작은 약간 다르지만 여전히 여러분이 기대하는 것과는 다릅니다.

"터미네이터 2"를 검색하면 검색되지 않습니다. (그냥 지어낸 이야기입니다. 우리가 하고 있는 일을 공개하면 고용주가 별로 기뻐하지 않을 수도 있습니다...어쨌든 용어는 좀 다르지만 원리는 같습니다), 이해가 안 되네요 아무것, 하지만 두 단어가 포함된 개체가 있다는 것을 알고 있습니다.

어쩌면 내가 뭔가 잘못하고 있는 건 아닐까?숫자 1을 모두 지웠어요...ENG, ENU 및 NEU(중립)에 대한 노이즈 구성 중 9개를 사용하여 인덱스를 재생성하고 검색을 시도했습니다.

도움이 되었습니까?

해결책

이러한 "작은 단어"는 전체 텍스트 색인에서 "의미 있는 단어"로 간주됩니다.의미 없는 단어 목록을 사용자 정의할 수 있습니다.이것 블로그 게시물 자세한 내용을 제공합니다.의미 없는 단어 파일을 변경할 때 전체 텍스트 색인을 다시 채워야 합니다.

다른 팁

나는 의미 없는 단어 파일에 대해 알고 있었지만 "터미네이터 2" 예가 여전히 문제를 일으키는 이유를 모르겠습니다.이 부분에 대해 물어보고 싶을 수도 있습니다. MSDN 데이터베이스 엔진 포럼 이런 일을 전문으로 하는 사람들이 모이는 곳.

CONTAINS(또는 CONTAINSTABLE)를 간단한 where 조건과 결합할 수 있습니다.

SELECT * FROM Movies WHERE CONTAINS(제목, '"Terminator 2"') 및 '%Terminator 2%'와 같은 제목

CONTAINS는 'Terminator 1'을 제거할 모든 Terminator를 찾습니다.

물론 엔진은 이와 유사한 조건이 아닌 CONTAINS로 시작할 만큼 충분히 똑똑합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top