현재 위치 - 법률 상담 무료 플랫폼 - 특허 조회 - Oracle 전체 텍스트 검색을 더 잘 활용하는 방법
Oracle 전체 텍스트 검색을 더 잘 활용하는 방법
Oracle text 함수를 사용하지 않고 Oracle 데이터베이스에서 텍스트를 검색하는 방법에는 여러 가지가 있으며 표준 INSTR 함수와 LIKE 연산자를 사용하여 수행할 수 있습니다.

Select * from my text whereinstr (the text,' Oracle ')& gt;; 0;

SELECT * FROM mytext. 여기서 텍스트는 "%Oracle%" 과 유사합니다.

Instr 과 like 를 사용하는 것이 이상적인 경우가 많습니다. 특히 검색이 하나의 작은 테이블에만 걸쳐 있는 경우 더욱 그렇습니다. 그러나 이러한 텍스트 위치 지정 방식은 전체 테이블 스캔, 리소스 소모, 검색 기능이 매우 제한적일 수 있습니다. 따라서 대량의 텍스트 데이터를 검색할 때는 오라클에서 제공하는 전체 텍스트 검색 기능을 사용하여 전체 텍스트 검색을 설정하는 것이 좋습니다. 1: 데이터베이스 역할을 확인하고 설정합니다. 먼저 데이터베이스에 CTXSYS 사용자와 CTXAPP 초석이 있는지 확인합니다. 이 사용자와 롤이 없으면 데이터베이스를 만들 때 intermedia 함수가 설치되지 않았음을 의미합니다. 이 기능을 설치하려면 데이터베이스를 수정해야 합니다. 기본적으로 ctxsys 사용자는 잠겨 있으므로 먼저 ctxsys 사용자를 활성화해야 합니다. 2 단계: 전체 텍스트 인덱스를 사용하려는 사용자에게 ctxsys 사용자 아래 ctx_ddl 에 대한 실행 권한을 부여합니다. 예를 들면 다음과 같습니다.

Ctx_ddl 에서 execute 를 pomoho 에 부여합니다

단계 3: 렉서 설정

Oracle 은 전체 텍스트 검색을 구현하는데, 그 메커니즘은 사실 매우 간단하다. 즉, Oracle 특허 렉서 (lexer) 를 통해 문장 내 모든 표의 단위 (Oracle 은 $ term 이라고 함) 를 찾아 dr$ 로 시작하는 테이블 세트에 기록하며 $ term 의 위치, 빈도, 해시 값 등의 정보를 기록합니다. 검색 시 Oracle 은 이 테이블 그룹에서 해당 $ term 을 찾아 발생 빈도를 계산하고 알고리즘을 기준으로 각 문서의 점수를 계산합니다. 이를' 일치율' 이라고 합니다. 렉서는 이 메커니즘의 핵심이며 전체 텍스트 검색의 효율성을 결정합니다. Oracle 은 언어마다 다른 렉서를 제공하며, 일반적으로 다음 세 가지를 사용할 수 있습니다.

N basic_lexer: 영어의 경우. 빈칸과 문장 부호에 따라 영어 단어를 문장에서 분리할 수 있으며, 너무 빈번하고 검색 의미를 상실한 단어를 if, is 등과 같은' 쓰레기' 로 자동 처리할 수 있습니다. , 처리 효율이 높다. 그러나 이 단어가 중국어로 쓰이는 데는 많은 문제가 있다. 공백과 구두점만 인식하고 중국어 문장에는 보통 공백이 없기 때문에 문장 전체를 $ term 으로 취급하지만 실제로는 검색 능력을 잃게 됩니다. "중국인들이 일어섰다" 라는 말을 예로 들어 보겠습니다. Basic_lexer 분석의 결과는 단 하나의 $ term, 즉 "중국 국민들이 일어섰다" 는 것이다. 이 시점에서 "중국" 을 검색하면 관련 콘텐츠를 검색할 수 없습니다.

N chinese_vgram_lexer: 모든 중국어 문자 세트를 지원하는 전용 중국어 분석기 (zhs16gb231280zhs16gbk 분석기는 중국어 문장을 단어 단위로 분석합니다. "중국 인민이 일어섰다" 는 말은 "중국", "중국인", "중국인", "인민", "인민이 일어섰다", "일어나다", "왔다", "왔다" 로 분석될 것이다 이 분석 방법, 구현 알고리즘은 매우 간단하고' 일망타진' 을 실현할 수 있지만, 효율성은 결코 만족스럽지 않다는 것을 알 수 있다.

N chinese_lexer: utf8 문자 집합만 지원하는 새로운 중국어 분석기입니다. 앞서 살펴본 바와 같이 분석기 중국어 vgram lexer 는 일반적으로 사용되는 중국어 단어를 모르기 때문에 매우 기계적입니다. 예를 들어, 위의' 사람이 서 있다' 와' 일어서다' 는 중국어에서는 결코 단독으로 나타나지 않기 때문에 이런 $ term 은 무의미하고 효율성에 영향을 줄 수 있다. Chinese_lexer 의 가장 큰 개선 사항은 분석기가 일반적으로 사용되는 대부분의 중국어 단어를 이해할 수 있기 때문에 문장을 보다 효율적으로 분석할 수 있다는 것입니다. 위의 두 바보 단위는 다시 나타나지 않아 효율성이 크게 높아졌다. 그러나 utf8 만 지원합니다. 데이터베이스가 zhs 16gbk 문자 세트라면 바보 같은 중국어 vgram lexer 만 사용할 수 있습니다.

아무 설정도 하지 않으면 구문 분석기 basic_lexer 가 기본적으로 사용됩니다. 사용할 렉서를 지정하려면 다음과 같이 하십시오.

먼저 현재 사용자 아래에 기본 설정을 만듭니다 (예: pomoho 사용자 아래에서 다음 문 실행).

Execctx _ ddl.create _ preference ('my _ lexer',' Chinese _ v gram _ lexer');

둘째, 전체 텍스트 인덱스를 생성할 때 사용할 렉서를 지정합니다.

Mytable(mycolumn) 에 인덱스 생성 myindex 인덱스 유형은 ctxsys.context 입니다

매개변수 ('lexermy _ lexer');

이렇게 생성된 전체 텍스트 인덱스는 chinese_vgram_lexer 를 파서로 사용합니다.

4 단계: 색인 작성.

다음 구문을 사용하여 전체 텍스트 인덱스를 작성합니다

인덱스 생성 [스키마. ] 스키마의 인덱스입니다. ] 테이블 (열) 인덱스 유형은 ctxsys.context [ONLINE] 입니다

Local [(partition [partition] [parameters ('paramstring')]

[,partition [partition] [parameters ('paramstring')]]

[parameters (paramstring)] [parallel n] [unusable];

예:

Pubmenu 에 인덱스 생성 CTX _ idx _ menuname(menuname)

Indextype 은 ctxsys.context 매개 변수 ('lexer my_lexer') 입니다

색인 사용

전체 텍스트 인덱싱은 간단하며 다음과 같은 방법으로 수행할 수 있습니다.

Select * from pub menu where contains (menu,' 사진 업로드') > 0

전체 텍스트 인덱스 유형

설정된 Oracle Text 인덱스를 도메인 인덱스라고 하며 네 가지 인덱스 유형을 포함합니다.

L 컨텍스트

2 CTXCAT

3 CTX 규칙

4 CTXXPATH

응용 프로그램 및 텍스트 데이터 유형에 따라 둘 중 하나를 선택할 수 있습니다.

여러 필드의 전체 텍스트 인덱싱

여러 텍스트 필드에서 요구 사항에 맞는 레코드를 쿼리해야 하는 경우가 많습니다. 이 시점에서 여러 필드의 전체 텍스트 인덱스를 작성해야 합니다. 예를 들어 pmhsubjects 의 subjectname 및 briefintro 에서 전체 텍스트 검색을 수행해야 하는 경우 다음 단계를 수행해야 합니다.

선호 다중 필드 색인 권장

Ctxsys 로 로그인하여 다음을 수행합니다.

Execctx _ ddl.create _ preference ('CTX _ idx _ subject _ pref' ,

다중 열 데이터 저장소');

기본 설정에 해당하는 필드 값을 설정합니다 (ctxsys 로 로그인)

Execctx _ ddl.set _ attribute ('CTX _ idx _ subject _ pref',' columns',' subjectname,'

전체 텍스트 인덱스 생성

Pmhsubjects(subjectname) 에 색인 ctx_idx_subject 를 작성합니다

INDEXTYPE ISctxsys. 컨텍스트 매개변수 ('데이터 저장소 ctxsys.ctx _ idx _ subject _ pref lexer my _ lexer')

색인 사용

Select * from pmh subjects where contains (제목 이름, "이우춘") > 0

전체 텍스트 인덱스 유지 관리

CTXSYS 를 위해. 응용 프로그램이 기본 테이블에 대해 DML 작업을 수행한 후 기본 테이블의 인덱스를 유지 관리해야 하는 컨텍스트 인덱스입니다. 인덱스 유지 관리에는 인덱스 동기화 및 인덱스 최적화가 포함됩니다.

색인화 후 Oracle 은 이 사용자 아래에 (인덱스 이름이 myindex 라고 가정) 다음 테이블을 자동으로 생성한다는 것을 알 수 있습니다.

$myindex$I 박사, $myindex$K 박사, $myindex$R 박사, $myindex$N 박사, 표 I 가 가장 중요합니다. 이 테이블을 보면 포함된 내용을 확인할 수 있습니다.

SELECT token_text, token _ count from dr $ I _ rsk1$ I 여기서 ROWNUM & lt= 20;

여기서는 조회를 열거하지 않습니다. 제가 가져갔어요. 보시다시피 이 테이블에 저장된 것은 실제로 Oracle 이 문서를 분석한 후 생성하는 $ term 레코드이며 $ term 의 위치, 빈도 및 해시 값이 포함됩니다. 문서 내용이 변경되면 이 I 테이블의 내용도 그에 따라 변경되어야 합니다. 이렇게 하면 Oracle 이 전체 텍스트 검색을 할 때 컨텐츠를 정확하게 검색할 수 있습니다 (전체 텍스트 검색이란 사실 이 테이블의 핵심이기 때문입니다). 동기화 (sync) 및 최적화 (optimize) 를 사용합니다.

Sync: 새 $ term 을 I 테이블에 저장합니다.

최적화: I 테이블의 쓰레기를 삭제합니다. 주로 I 테이블에서 삭제된 $ term 을 삭제합니다.

기본 테이블의 인덱스 문서가 삽입, 업데이트 또는 삭제되면 기본 테이블의 변경 사항은 인덱스가 동기화될 때까지 인덱스에 즉시 영향을 주지 않습니다. 뷰 CTX _ user _ TBD 를 질의하여 해당 변경사항을 조회할 수 있습니다. 예를 들면 다음과 같습니다.

SELECT pnd_index_name, pnd_rowid,

TO _ CHAR(PND _ 타임 스탬프,' dd-mon-yyyy hh24:mi:ss') 타임 스탬프

Ctx _ user _ pending 에서

이 명령문의 출력은 다음과 유사합니다.

PND 인덱스 이름 PND ROWID 타임스탬프

---

내 index aaadxnaabaas3 saac 06-oct-199915: 56: 50

동기화 및 최적화 방법: Oracle 제공 ctx_ddl 패키지를 사용하여 인덱스를 동기화 및 최적화할 수 있습니다.

1. CTXCAT 유형 인덱스의 경우 Oracle 은 기본 테이블에 대해 DML 작업을 수행할 때 인덱스를 자동으로 유지 관리합니다. 문서에 대한 변경 사항은 색인에 즉시 반영됩니다. CTXCAT 는 트랜잭션 형식의 인덱스입니다.

인덱스 동기화

기본 테이블을 삽입, 수정 및 삭제한 후 인덱스를 동기화합니다. Sync 를 사용하여 인덱스를 동기화하는 것이 좋습니다. 구문:

Ctx _ ddl.sync _ 색인 (

VARCHAR2 의 idx_name 은 기본적으로 비어 있습니다

VARCHAR2 의 메모리는 기본적으로 비어 있습니다.

VARCHAR2 의 part_name 은 기본적으로 비어 있습니다

Parallel_degree IN NUMBER 기본값1);

Idx 이름 색인 이름

Memory 인덱스를 동기화하는 데 필요한 메모리를 지정합니다. 기본값은 DEFAULT_INDEX_MEMORY 시스템 매개변수입니다.

큰 메모리를 지정하면 인덱스 효율성과 쿼리 속도가 빨라지고 인덱스 단편화가 줄어듭니다.

Part_name 이 동기화되는 분할 인덱스입니다.

병렬도 병렬 동기화 인덱스입니다. 평행도를 설정합니다.

예를 들면 다음과 같습니다.

인덱스 동기화 myindex: exectx _ ddl.sync _ index ('myindex');

권장 사항 구현: Oracle 의 작업을 통해 인덱스를 동기화할 것을 권장합니다.

인덱스 최적화

잦은 인덱스 동기화로 인해 컨텍스트 인덱스가 조각화될 수 있습니다. 인덱스 단편화는 질의 응답 속도에 심각한 영향을 줍니다. 정기적으로 인덱스를 최적화하고, 조각을 줄이고, 인덱스 크기를 줄이고, 쿼리 효율성을 높일 수 있습니다.

테이블에서 텍스트를 삭제하면 Oracle Text 는 삭제된 문서에 태그를 지정하지만 인덱스를 즉시 수정하지는 않습니다. 따라서 기존 문서 정보는 불필요한 공간을 차지하므로 추가 조회 비용이 발생합니다. 전체 모드에서 인덱스를 최적화하고 인덱스에서 유효하지 않은 이전 정보를 제거해야 합니다. 이 과정을 쓰레기 처리라고 합니다. 양식 텍스트 데이터를 자주 업데이트하고 삭제할 때 가비지 처리가 필요합니다.

Execctx _ ddl.optimize _ index ('myidx',' full');

제안: 시스템이 유휴 상태일 때 매일 전체 텍스트 인덱스를 최적화하여 검색 효율성을 높입니다.