0 소개
월드 와이드 웹의 개발과 빅 데이터 시대의 출현으로 매일 많은 양의 디지털 정보가 제작, 저장, 전송 및 변환됩니다. 많은 양의 정보에서 특정 방식으로 귀하의 요구를 충족시키는 정보를 찾는 방법을 주문하고 활용할 수 있도록 주요 문제가되었습니다. 전체 텍스트 검색 기술은 오늘날 가장 일반적인 정보 쿼리 응용 프로그램입니다. 인생에서 검색 엔진은 블로그 포럼에서 정보를 검색하는 데 사용됩니다. 이러한 검색의 핵심 원칙은이 기사에서 구현 될 풀 텍스트 검색 기술입니다. 문서 정보의 디지털화를 실현함으로써 정보를 효과적으로 저장하고 적시에 정확하게 추출하는 것은 모든 회사, 기업 및 단위가 좋은 기초를 마련하기위한 기초입니다. 영어로 된 전체 텍스트 검색을위한 많은 성숙한 이론과 방법이 이미 있습니다. 오픈 소스 전체 텍스트 검색 엔진 Lucene은 Apache Software Foundation의 Jakarta 프로젝트 팀의 하위 프로젝트입니다. 그 목적은 소프트웨어 개발자에게 간단하고 사용하기 쉬운 툴킷을 제공하여 대상 시스템에서 전체 텍스트 검색 기능을 구현할 수 있도록하는 것입니다. Lucene은 중국어를 지원하지 않지만 현재 중국 내용을 색인 할 수있는 많은 오픈 소스 중국어 단어 세그먼트가 있습니다. Lucene의 핵심 원칙에 대한 연구를 바탕 으로이 논문은 각각 중국 및 영어 웹 페이지의 크롤링 및 검색을 인식합니다.
1 루센 소개
1.1 루센 소개
Lucene은 Java로 작성된 전체 텍스트 검색 엔진 툴킷으로 인덱싱 및 검색의 두 가지 핵심 기능을 구현하고 두 가지는 서로 독립적이므로 개발자가 쉽게 확장 할 수 있습니다. Lucene은 인덱스에 저장된 정보와 쉽게 상호 작용할 수있는 풍부한 API를 제공합니다. 완전한 전체 텍스트 검색 응용 프로그램은 아니지만 응용 프로그램에 대한 인덱싱 및 검색 기능을 제공합니다. 즉, 루센이 진정으로 일하기를 원한다면이를 기반으로 필요한 2 차 개발을 수행해야합니다.
Lucene의 구조 설계는 데이터베이스의 구조 설계와 유사하지만 Lucene의 지수는 데이터베이스의 지수와 매우 다릅니다. 데이터베이스 및 루센 인덱싱은 검색의 편의성을위한 것이지만 데이터베이스는 일부 필드에 대해서만 설정되어 있으며 데이터를 형식 정보로 변환하고 저장해야합니다. 전체 텍스트 검색은 모든 정보를 특정 방식으로 색인화하는 것입니다. 두 검색의 차이와 유사성은 표 1-1에 나와 있습니다.
표 1-1 : 데이터베이스 검색 및 루센 검색 비교
비교 | 루센 검색 | 데이터베이스 검색 |
데이터 검색 | Lucene의 인덱스 파일에서 확인하십시오 | 데이터베이스 인덱스에서 레코드를 검색합니다 |
인덱스 구조 | 문서 | 기록 |
쿼리 결과 | 적중 : 관계를 만족시키는 문서 구성 | 쿼리 결과 세트 : 키워드가 포함 된 레코드 |
전문 검색 | 지원하다 | 지원되지 않습니다 |
퍼지 쿼리 | 지원하다 | 지원되지 않습니다 |
결과 정렬 | 가중치를 설정하고 상관 관계를 정렬합니다 | 정렬 할 수 없습니다 |
1.2 루센 전체 구조
Lucene 소프트웨어 패키지의 릴리스 형식은 빠른 버전 업데이트와 대형 버전 간격이있는 JAR 파일입니다. 이 기사는 버전 5.3.1을 사용하며 사용 된 주요 하위 포장은 표 1-2에 나와 있습니다.
표 1-2 : 서브 포장 및 기능
패키지 이름 | 기능 |
org.apache.lucene.analysis | 분사 |
org .apache.lucene. 문서 | 인덱스 관리를위한 문서 |
org .apache.lucene .index | 추가, 삭제 등을 포함한 인덱싱 작업 |
org.apache.lucene.queryparser | 쿼리, 검색 표현식 구성 |
org .apache.lucene .search | 검색 관리 |
org .apache.lucene .Store | 데이터 저장 관리 |
org .apache.lucene .util | 공개 카테고리 |
1.3 루센 아키텍처 디자인
Lucene은 매우 강력한 기능을 가지고 있지만 근본적으로는 주로 두 부분을 포함합니다. 하나는 텍스트 내용이 세분화 된 후에 색인을 라이브러리에 색인화하는 것입니다. 다른 하나는 쿼리 조건, 즉 인덱스 및 쿼리를 설정하는 결과를 반환하는 것입니다.
그림 1-1에서 볼 수 있듯이이 기사는 외부 인터페이스 및 정보 소스를 버리고 웹 페이지에서 크롤링하는 텍스트 콘텐츠를 색인화하고 쿼리하는 데 중점을 둡니다.
그림 1-1 : 루센의 건축 설계
2 JDK 설치 및 환경 가변 구성
1.JDK 다운로드 :
Oracle의 공식 웹 사이트에서 시스템 버전과 일치하는 압축 패키지를 다운로드하면 URL은 다음과 같습니다. 프롬프트에 따라 설치 및 설치를 클릭하십시오. 설치 과정에서 JRE를 설치하는지 여부를 프롬프트하고 예를 클릭합니다.
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2. 환경 변수 설정 :
(1) 컴퓨터를 마우스 오른쪽 버튼으로 클릭 =》 속성 =》 고급 시스템 설정 =》 환경 변수 =》 시스템 변수 =》》》 java_home : 설치 경로
(2) 경로에 새로 추가 =》%java_home%/bin
3. 테스트가 성공했는지 :
start =》 run =》 cmd 팝업 dos 창에 입력하십시오
입력 : Java -Version에는 버전 정보가 표시됩니다.
입력 : Javac 사용 정보는 Javac에 나타납니다
외관은 그림 2-1에 성공적으로 표시됩니다.
그림 2-1 : CMD 명령 상자 테스트 Java 구성
3. 웹 컨텐츠를 얻으려면 Java 코드를 작성하십시오
Lucene은 다른 언어에 대해 다른 워드 세그먼트를 사용해야하기 때문에 표준 단어 세그먼터는 영어로 사용되며 SmartCN Word 세그먼트는 중국어로 사용됩니다. 웹 페이지를 얻을 때 먼저 웹 페이지를 HTML 파일로 얻습니다. HTML에서 태그 간섭은 검색 효과에 영향을 미칩니다. 따라서 HTML 태그를 제거해야하고 텍스트 내용은 저장을 위해 TXT 파일로 변환됩니다. 단어 참여자를 제외하고 중국어와 영어로 된 다른 사람들은 기본적으로 동일하므로 후속 코드 및 실험 결과 데모가 선택됩니다. 이 기사에서는 중국어 및 영어 이야기의 50 개의 웹 페이지를 예로 들어 선택합니다.
특정 코드 디자인은 다음과 같습니다. url2html.java는 웹 페이지 입력 URL을 HTML 파일로 변환하고 html2txt.java 파일은 HTML 문서 태그의 제거를 인식하고 TXT 문서로 변환합니다. 특정 코드는 그림 3-1 및 3-2에 나와 있습니다.
public void way (String Filepath, String URL)는 예외를 {file dest = new File (filepath); // 파일 생성 inputStream IS; // byte input stream fileoutputStream fos = new FileOutputStream (dest); // byte output stream url wangzhi = new url (url); // set url is = wangzhi. bufferedInputStream bis = new bufferedInputStream (is); // 바이트 입력 스트림에 대한 버퍼링 된 bufferedOutputStream = new bufferedOutputStream (fos); // 바이트 출력 스트림/** byte*/int 길이 읽기; 바이트 [] 바이트 = 새로운 바이트 [1024*20]; while (길 } /** 닫기 버퍼링 스트림 및 입력 및 출력 스트림* / bos.close (); fos.close (); bis.close (); is.close (); } public String getbody (String val) {String zyf = val.replaceall ( "</? [^>]+>", ""); // <html> tag return return zyf;} public void writeTxt (string str, String writePath) {file writename = new File (writePath); try {writename.createnewfile (); BufferedWriter out = New BufferedWriter (New Filewriter (WriteName)); out.write (str); out.flush (); out.close (); } catch (ioexception e) {e.printstacktrace (); }}"학교에가는 멍청한 늑대"의 웹 페이지를 예로 들어 보면 문서 경로는 "e :/work/lucene/test/data/html"및 "e :/work/lucene/test/data/txt"로 설정됩니다. 웹 페이지를 읽을 때 설정 해야하는 두 매개 변수의 이름은 Filename으로 명명되었으며 대상 URL을 얻습니다. 두 가지 메소드로 호출을 구현하기위한 새로운 기본 기능을 만듭니다. 특정 구현은 그림 3-3에 나와 있습니다.
public static void main (string [] args) {String filename = "jingdizhi"; // 파일 이름 문자열 url = "http://www.51test.net/show/8072125.html" ;//web 페이지 filepath = "e : // work // lucene // test // test // html //"+filename+".html"; // html+filename string writepath = "e : // lucene // txt //"+filename+".txt"; = 새로운 URL2HTML (); {url2html.way (filepath, url); } catch (예외 e) {e.printstacktrace (); } html2txt html2txt = new html2txt (); 문자열 읽기 = html2txt.readfile (filepath); // html 파일 읽기 문자열 txt = html2txt.getbody (read); // html tag system.out.println (txt); try {html2txt.writetxt (txt, writepath); } catch (예외 e) {e.printstacktrace (); }}프로그램을 실행 한 후 "Silly Wolf School.html"및 "Silly Wolf School.txt"를 각각 2 개의 폴더로 만듭니다.
4. 인덱스를 만듭니다
인덱싱 및 쿼리의 기본 원칙은 다음과 같습니다.
인덱싱 : 검색 엔진 인덱싱은 실제로 "Word-Document Matrix"의 특정 데이터 구조를 구현하는 것입니다. 또한 전체 텍스트 검색의 첫 단계입니다. Lucene은 주로 add (), delete () 및 update ()를 포함하여 인덱스 관리를위한 Indexwriter 클래스를 제공합니다. 무게 설정도 있습니다. 다른 인덱스 가중치의 설정을 통해 검색 중 상관 크기에 따라 반환 할 수 있습니다.
검색 : 원래 직접 검색은 서류를 순서대로 검색하는 것이 었습니다. 색인을 설정 한 후 인덱스를 검색하여 인덱스 워드가 문서에 나타나는 위치를 찾은 다음 인덱스 항목이 올바른 문서에서 위치와 단어를 반환 할 수 있습니다. Lucene은 IndexSearcher 클래스를 검색 문서에 제공합니다. 검색 양식은 주로 두 가지 범주로 나뉩니다. 첫 번째 범주는 용어이며 단일 용어 항목을 검색합니다. 두 번째 카테고리는 Parser이며 검색 표현을 사용자 정의 할 수 있으며 더 많은 검색 양식이 있습니다. 특정 방법은 나중에 시연 될 것입니다.
4.1 실험 환경
이 PC는 Windows 10x64 시스템, 8g 메모리 및 256G SSD를 사용합니다. 개발 환경은 MyClipse 10이고 JDK 버전은 1.8입니다. 실험 동안 일부 구문 변경으로 인해 버전 1.6을 사용하여 여러 클래스가 구현되었습니다.
4.2 인덱스 생성
인덱스 라이브러리를 만드는 것은 인덱스 라이브러리에 인덱스 레코드를 추가하는 것입니다. Lucene은 인덱스 레코드를 추가하고 인덱스를 추가하는 인터페이스를 제공합니다.
주로 "쓰기 인덱서", "문서"및 "도메인"의 세 가지 범주를 사용합니다. 인덱스를 만들려면 먼저 문서 문서 개체를 구성하고 문서의 다양한 필드를 결정해야합니다. 이는 관계형 데이터베이스에서 테이블 구조의 설정과 유사합니다. 문서는 테이블의 레코드 행과 동일하며 필드는 행의 열과 같습니다. Lucene에서는 다른 도메인의 속성 및 데이터 출력 요구 사항에 대해 도메인에 대해 다른 인덱스/스토어 필드 규칙을 선택할 수 있습니다. 이 실험에서는 파일 이름 파일 이름, 파일 경로 전체 경로 및 텍스트 내용이 문서 필드로 사용됩니다.
Indexwriter는 새로 추가 된 문서를 수신하여 인덱스 라이브러리에 작성해야합니다. Write Indexwriter Indexwriter를 만들 때 사용중인 언어 분석기를 지정해야합니다. 인덱스 생성은 두 가지 범주로 나뉩니다. 첫 번째 : 비가 중 인덱스; 두 번째 : 가중 지수.
public Indexer (String IndexDir) 예외 {directory dir = fsdirectory.open (paths.get (indexDir)); 분석기 분석기 = 새로운 StandardAnalyzer (); // Standard Word Divider // SmartChineseAnalyzer Analyzer = New SmartChineseAnalyzer (); indexwriterConfig iwc = 새로운 indexwriterConfig (분석기); Writer = New Indexwriter (Dir, IWC); }인덱스 필드를 설정하면 스토어는 인덱스 컨텐츠가 저장되어 있는지 여부를 나타냅니다. Filename과 FullPath는 메모리를 줄이고 쿼리 리턴을 용이하게하기 위해 저장할 수 있습니다.
개인 문서 getDocument (파일 F)는 예외 {docum doc = new Document (); doc.add (New Textfield ( "내용", New Filereader (f)); doc.add (new Textfield ( "filename", f.getname (), store.yes)); doc.add (new Textfield ( "fullpath", f.getCanonicalPath (), store.yes); // Path Index return doc; }기본 코드를 실행 한 후 결과는 파일을 색인화 할 때 파일 "index 파일 : + 파일 경로"를 반환하고 모든 파일의 인덱스를 출력하는 데 걸리는 시간을 계산합니다.
4.3 인덱스 삭제 및 수정
일반적으로 데이터베이스의 작업에는 CRUD (추가, 삭제, 변경, 쿼리)가 포함됩니다. 추가한다는 것은 인덱스 항목을 선택하고 설정하는 것을 의미합니다. 보다 핵심 기능으로 쿼리는 나중에 논의 될 것입니다. 여기서 우리는 주로 인덱스를 삭제하고 업데이트 할 때 사용되는 방법을 기록합니다.
인덱스 삭제가 전체 데이터베이스에 영향을 미치기 때문에 삭제는 일반 삭제 및 완전 삭제를 포함한 두 가지 유형으로 나뉩니다. 또한 대규모 시스템의 경우 인덱스 삭제는 시스템의 기본 계층을 변경하는 것을 의미하며, 이는 시간이 많이 걸리고 노동 집약적이며 반환 할 수 없습니다. 인덱스가 처음 인덱스되면 인덱스가 설정된 후 몇 개의 작은 파일이 생성되었습니다. 검색 할 때 각 파일이 병합 된 다음 검색됩니다. 일반 삭제는 이전에 확립 된 인덱스의 간단한 표시 일 뿐이므로 검색 및 반환이 불가능합니다. 완전한 삭제는 지수를 파괴하는 것을 의미하며 취소 할 수 없습니다. 1의 색인 항목 "ID"로 인덱스를 삭제하는 예를 들어보십시오.
정상 삭제 (병합 전에 삭제) :
writer.deletedocuments (새 용어 ( "id", "1"); writer.commit ();
완전히 삭제 (병합 후 삭제) :
Writer.deletedocuments (새 용어 ( "id", "1")); writer.forcemergedeletes (); // force delete writer.commit ();
인덱스 수정 원리는 비교적 간단하며 원래 인덱스를 기반으로 범위를 구현하는 것입니다. 구현 코드는 위 텍스트에서 인덱스를 추가하는 것과 동일합니다. 나는 여기서 그것을 설명하지 않을 것입니다.
4.4 인덱스의 가중치
Lucene은 기본적으로 관련성으로 정렬됩니다. Lucene은 필드에 설정할 수있는 부스트 매개 변수를 제공합니다. 이 매개 변수는 레코드의 중요성을 나타내는 데 사용됩니다. 검색 조건이 충족되면 중요한 기록이 우선 순위가 높아지고 반환 결과가 차단됩니다. 레코드가 많으면 무게가 낮은 레코드는 홈페이지 뒤에 순위가 매겨집니다. 따라서 인덱스의 가중 작업은 반환 결과의 만족에 영향을 미치는 중요한 요소입니다. 실제로 정보 시스템을 설계 할 때는 현장 무게의 변화를 촉진하고 사용자의 요구를 더 잘 충족시키기 위해 엄격한 가중치 계산 공식이 있어야합니다.
예를 들어, 검색 엔진은 클릭률이 높고 링크 및 종료 된 웹 페이지는 반환하면 첫 번째 페이지로 순위가 매겨집니다. 구현 코드는 그림 4-1에 나와 있으며, 비가 중량 가중 결과 쌍은 그림 4-2에 나와 있습니다.
Textfield Field = New Textfield ( "FullPath", F.getCanonicalPath (), Store.Yes); if ( "A Great Grief.txt".Equals (f.getName ())) {field.setBoost (2.0f); // 파일 이름으로 fullPath 경로에 second story.txt; } // 기본 무게는 1.0이고 무게를 증가시키기 위해 1.2로 변경합니다. doc.add (필드);그림 4-1 : 인덱스 가중치
그림 4-2 : 가중치 전기
그림 4-2 : 가중치 후
그림 4-2의 결과에서 알 수 있듯이 가중치가있을 때 사전 순서로 반환됩니다. 따라서, 두 번째 이전에는 첫 번째가 가중치가 높고 두 번째라는 파일의 순서가 반환되면 무게 테스트를 실현할 때 변경됩니다.
5 쿼리를 수행합니다
Lucene의 검색 인터페이스는 주로 QueryParser, IndexSearcher 및 Hits의 세 가지 클래스로 구성됩니다. QueryParser는 사용자가 제출 한 쿼리 키워드를 파싱하는 쿼리 파서입니다. 새 파서를 만들 때 구문 분석 할 도메인과 사용할 언어 분석기를 지정해야합니다. 여기에 사용 된 언어 분석기는 인덱스 라이브러리가 설정되었을 때 사용되는 구문 분석기와 동일해야합니다. 그렇지 않으면 쿼리 결과가 올바르지 않습니다. IndexSearcher는 인덱스 검색 자입니다. IndexSearcher를 인스턴스화 할 때 인덱스 라이브러리가있는 디렉토리를 지정해야합니다. IndexSearcher는 인덱스 검색을 수행하는 검색 방법이 있습니다. 이 메소드는 쿼리를 매개 변수로 받아들이고 HITS를 반환합니다. HISTS는 일련의 정렬 된 쿼리 결과 모음입니다. 컬렉션의 요소는 문서입니다. GET 문서 메소드를 통해 파일 이름, 파일 경로, 파일 콘텐츠 등과 같은이 문서에 해당하는 파일에 대한 정보를 얻을 수 있습니다.
5.1 기본 쿼리
그림과 같이 쿼리하는 두 가지 주요 방법이 있지만 부울 논리 표현식, 퍼지 매칭 등을 포함한 유연한 조합을 가질 수있는 첫 번째 유형의 구성 쿼리 파서 표현식을 사용하는 것이 좋습니다. 그러나 두 번째 유형의 용어는 어휘 쿼리에만 사용할 수 있습니다.
1. QueryParser 쿼리 양식 구성 :
QueryParser Parser = New QueryParser ( "FullPath", Analyzer); Query Query = parser.parse (q);
2. 특정 항목에 대한 쿼리 :
용어 t = 새 용어 ( "filename", q); query query = new termquery (t);
쿼리 결과는 그림 5-1에 나와 있습니다. "Big"을 포함하는 쿼리 파일 이름 파일 이름을 예로 들어보십시오.
그림 5-1 : "큰"쿼리 결과
5.2 퍼지 쿼리
QueryParser를 구성 할 때는 q를 수정하여 정확한 일치 및 퍼지 매칭을 달성 할 수 있습니다. 퍼지 매칭은 "Q"이후 "~"를 추가하여 수정됩니다. 그림 5-2와 같이 :
그림 5-2 : 퍼지 매칭
5.3 적격 조건 쿼리
부울 논리적 쿼리 및 퍼지 쿼리는 쿼리 단어 Q를 변경하면됩니다. 제한된 조건부 쿼리는 주로 다음 범주로 나뉘어 진 쿼리 표현식을 설정해야합니다.
지정된 항목 범위 검색, 지정된 번호 범위, 지정된 문자열 시작 및 다중 조건 쿼리로 각각 적용된 쿼리를 나열합니다. 실제 매개 변수는 상한 및 하한이 포함되어 있는지를 나타냅니다.
항목 범위를 지정합니다.
termRangeQuery query = new TermRangeQuery ( "desc", new BytesRef ( "b".getBytes ()), new ByTesRef ( "c".getBytes ()), true, true);
숫자 범위를 지정합니다.
NumericRangeQuery <integer> query = NumericRangeQuery.NewIntrange ( "id", 1, 2, true, true);
문자열의 시작을 지정합니다.
prefixquery query = new PrefixQuery (새 용어 ( "City", "A"));
다중 조건 쿼리 :
NumericRangeQuery <integer> query1 = NumericRangeQuery.newIntrange ( "id", 1, 2, true, true); PrefixQuery Query2 = 새로운 용어 ( "City", "A"); booleanQuery.builder booleanQuery = new booleanquery.builder (); booleanquery.add (query1, booleanclause.occur.must); booleanquery.add (query2, booleanclause.occur.must);
5.4 강조 쿼리
Baidu 및 Google과 같은 검색 엔진에서 쿼리가 표시되면 쿼리 키워드가 포함되어있을 때 반환 된 웹 페이지가 빨간색으로 표시되며 요약으로 표시됩니다. 즉, 키워드가 포함 된 일부 컨텐츠가 가로 채고 반환됩니다. 주요 쿼리는 키워드의 스타일 변경을 실현하는 것입니다. 이 실험은 MyClipse에서 수행됩니다. 결과를 반환 할 때 스타일 변경이 없습니다. 컨텐츠를 반환하는 키워드에 HTML 태그 만 추가합니다. 웹 페이지에 표시되면 스타일 변경이 발생합니다.
강조 표시된 설정 코드는 그림 5-3에 나와 있으며 결과는 그림 5-4에 나와 있습니다. 난징 일치하는 단어가 추가되고 레이블이 붙어 있으며 웹 페이지에 표시되면 대담하고 빨간색으로 표시됩니다.
QueryScorer scorer = new QueryScorer (Query); Fragmenter Fragmenter = new SimplesPanfragmenter (scorer); SimpleHtmlformatter simplehtmlformatter = new SimpleHtmlformatter ( "<b> <font color = 'red'>", "</font> </b>"); Highlighter = new Highllatter (simplehllathter) Scorer); Highlighter.settextFragmenter (Fragmenter);
그림 5-3 : 강조 설정 설정
그림 5-4 : 결과를 강조하십시오
실험 중에 6 가지 문제와 단점이 발생합니다
Lucene 버전은 빠르게 업데이트되며 JDK 버전, Eclipse 버전 및 Lucene 버전 간에는 잘 연결되어 있어야합니다. 그렇지 않으면 많은 비 호환성이 발생합니다. 디버그 버전과 JDK1.6 및 JDK1.8의 선택에는 많은 어려움이 있습니다. 예를 들어, 웹 크롤링의 Append 메소드는 버전 1.8에서 삭제되었으며 사용할 수 없습니다. 그러나 문서 경로 힘 FSDirectory.open ()을 읽으려면 JDK1.8을 지원해야합니다.
이 실험의 단점은 주로 다음에 반영됩니다.
코드는 덜 유연합니다. 웹 페이지를 크롤링 할 때는 수동으로 수행해야하며 중국어와 영어로 별도로 수행해야합니다. 웹 페이지의 언어에 대한 판단이 있도록 코드를 개선 한 다음 다른 워드 세그먼트기를 자동으로 선택하고 실행합니다.
코드는 재사용 성이 낮고 더 이상 합리적인 분류 및 방법 구성이 없습니다. 단순화를 위해, 효과는 기본적으로 여러 핵심 코드로 주석을 달고 표시함으로써 달성되며, 이는 개선해야합니다.
코드는 이식성이 낮고 웹 페이지의 크롤링은 JDK1.6 버전을 사용하고 Lucene의 구현은 JDK1.8 버전을 사용합니다. 다른 기계로 내보낼 때 환경을 약간 수정하고 구성해야하며 1 클릭 작업을 수행 할 수 없습니다.
7 요약
Lucene의 원칙에 따라이 기사는 전체 텍스트 검색의 아이디어와 방법을 이해하고 일반적으로 사용되는 기능에 대한 실험 및 테스트를 수행합니다. 실험 중에, 나는 검색 엔진의 원칙에 대해 알게되었고 정보 검색 과정의 내용을 바탕으로 더 나은 실제 경험을 가졌습니다. Lucene은 우수한 오픈 소스 전체 텍스트 검색 기술 프레임 워크입니다. 우리는 그것에 대한 심층적 인 연구를 통해 구현 메커니즘에 더 익숙합니다. 그것을 연구하는 과정에서, 우리는 많은 객체 지향 프로그래밍 방법과 아이디어를 배웠습니다. 좋은 시스템 프레임 워크와 확장 성은 배울 가치가 있습니다.