Lucene은 다양한 고급 검색 형식을 구현합니다.
대부분의 검색엔진은 사용자가 조회를 조합할 수 있도록 부울 조작부호를 제공한다. 전형적인 부울 조작부호는 AND, OR, NOT가 있다.Lucene은 AND, OR, NOT, 더하기 (+), 빼기 (-) 등 5가지 부울 조작부호를 지원합니다.이어서 나는 모든 조작부호의 용법을 이야기할 것이다.
OR: 문자 A나 B가 있는 문서를 검색하려면 OR 조작부호를 사용해야 합니다.기억해야 할 것은 만약 당신이 간단하게 빈칸으로 두 키워드를 분할할 뿐이라면, 사실 검색할 때 검색엔진은 자동으로 두 키워드 사이에 OR조작부호를 붙인다는 것이다.예를 들어, Java OR Lucene과 Java Lucene은 모두 Java 또는 Lucene이 포함된 문서를 검색합니다.
AND: 이상의 키워드가 포함된 문서를 검색하려면 AND 조작부호를 사용해야 합니다.예를 들어, Java AND Lucene은 Java와 Lucene을 모두 포함하는 문서를 반환합니다.
NOT: Not 조작부호는 NOT 뒤에 있는 키워드를 포함하는 문서를 되돌려주지 않습니다.예를 들어, Java가 있지만 Lucene이 없는 모든 문서를 검색하려면 Java NOT Lucene이라는 검색어를 사용할 수 있습니다.그러나 검색어에 대해서만 이 조작부호를 사용할 수 없습니다. 예를 들어 검색어'NOT Java'는 결과를 되돌려 주지 않습니다.
더하기 기호(+): 이 조작부호의 작용은 AND와 차이가 많지 않지만, 그 뒤에 있는 검색어에만 작용합니다.예를 들어, Java가 반드시 포함되어 있지만 Lucene이 포함되어 있지 않은 문서를 검색하려면 "+Java Lucene"이라는 검색어를 사용할 수 있습니다.
빼기 기호(-): 이 조작부호의 기능은 NOT와 마찬가지로 조회 문장인'Java-Lucene'은 자바를 포함하지만 Lucene를 포함하지 않는 모든 문서를 되돌려줍니다.
다음은 Lucene에서 제공하는 API를 이용하여 볼 조회를 실현하는 방법을 살펴보겠습니다.명세서 1은 볼 조작부호를 이용하여 조회하는 과정을 보여 줍니다.
명세서 1: 부울 연산자 사용하기
//Test boolean operator
public void testOperator(String indexDirectory) throwsException{
Directory dir =FSDirectory.getDirectory(indexDirectory,false);
IndexSearcher indexSearcher = new IndexSearcher(dir);
String[] searchWords = {"Java AND Lucene", "Java NOT Lucene", "JavaOR Lucene",
"+Java +Lucene", "+Java -Lucene"};
Analyzer language = new StandardAnalyzer();
Query query;
for(int i = 0; i < searchWords.length; i++){
query = QueryParser.parse(searchWords[i], "title", language);
Hits results = indexSearcher.search(query);
System.out.println(results.length() + "search results for query " +searchWords[i]);}<p></p>
<p></p>
도메인 검색(Field Search)Lucene은 도메인 검색을 지원합니다. 어떤 도메인 (Field) 에서 검색을 하는지 지정할 수 있습니다.예를 들어 색인 문서에 두 개의 도메인, Title과 Content가 포함되어 있다면, "Title: Lucene AND Content: Java"를 조회해서 Title 도메인에 Lucene를 포함하고 Content 도메인에 Java를 포함하는 모든 문서를 되돌릴 수 있습니다.목록 2는 Lucene의 API를 사용하여 도메인 검색을 수행하는 방법을 보여 줍니다.
목록 2: 도메인 검색 구현
<p>//Test field search
public void testFieldSearch(String indexDirectory) throwsException{
Directory dir =FSDirectory.getDirectory(indexDirectory,false);
IndexSearcher indexSearcher = new IndexSearcher(dir);
String searchWords = "title:Lucene AND content:Java";
Analyzer language = new StandardAnalyzer();
Query query = QueryParser.parse(searchWords, "title",language);
Hits results = indexSearcher.search(query);
System.out.println(results.length() + "search results for query " +searchWords);</p>
<p></p>
와일드카드 검색(Wildcard Search)Lucene은 두 가지 와일드카드를 지원합니다: 물음표(?)및 별표(*).물음표(?)를 사용할 수 있습니다.단일 문자의 와일드카드 질의를 수행하거나 별표(*)를 사용하여 여러 문자의 와일드카드 질의를 수행합니다.예를 들어tiny나tony를 검색하고 싶으면 검색 문장't?ny'를 사용할 수 있다.Teach, Teacher, Teaching을 검색하려면 "Teach*"라는 검색어를 사용할 수 있습니다.명세서 3은 어댑터 조회의 과정을 보여 줍니다.
명세서 3: 와일드카드 조회
<p>//Test wildcard search
public void testWildcardSearch(String indexDirectory)throwsException{
Directory dir =FSDirectory.getDirectory(indexDirectory,false);
IndexSearcher indexSearcher = new IndexSearcher(dir);
String[] searchWords = {"tex*", "tex?", "?ex*"};
Query query;
for(int i = 0; i < searchWords.length; i++){
query = new WildcardQuery(new Term("title",searchWords[i]));
Hits results = indexSearcher.search(query);
System.out.println(results.length() + "search results for query " +searchWords[i]);}</p>
<p></p>
모호한 조회Lucene에서 제공하는 모호한 조회는 편집 거리 알고리즘(Edit distance algorithm)을 기반으로 합니다.너는 검색어의 끝부분에 문자를 붙여서 모호한 조회를 할 수 있다.예를 들어 검색 문장'think~'는think와 유사한 키워드를 포함하는 모든 문서를 되돌려줍니다.목록 4에는 Lucene의 API를 사용하여 모호한 질의를 수행하는 코드가 표시됩니다.
명세서 4: 모호한 조회 실현
<p>//Test fuzzy search
public void testFuzzySearch(String indexDirectory)throwsException{
Directory dir =FSDirectory.getDirectory(indexDirectory,false);
IndexSearcher indexSearcher = new IndexSearcher(dir);
String[] searchWords = {"text", "funny"};
Query query;
for(int i = 0; i < searchWords.length; i++){
query = new FuzzyQuery(new Term("title",searchWords[i]));
Hits results = indexSearcher.search(query);
System.out.println(results.length() + "search results for query " +searchWords[i]);}</p>
<p></p>
범위 검색(Range Search)범위 검색 특정 범위의 값이 일치하는 문서를 검색합니다.예를 들어 "age:[18 TO 35]"조회는 모든 age 도메인의 값이 18에서 35 사이의 문서를 되돌려줍니다.목록 5에는 Lucene의 API를 사용하여 검색을 반환하는 프로세스가 표시됩니다.
목록 5: 테스트 범위 검색
<p>//Test range search
public void testRangeSearch(String indexDirectory)throwsException{
Directory dir =FSDirectory.getDirectory(indexDirectory,false);
IndexSearcher indexSearcher = new IndexSearcher(dir);
Term begin = new Term("birthDay","20000101");
Term end = newTerm("birthDay","20060606");
Query query = new RangeQuery(begin,end,true);
Hits results = indexSearcher.search(query);
System.out.println(results.length() + "search results isreturned");
}</p>
위에서 말한 것은 편집자가 여러분께 소개한 Lucene이 다양한 고급 검색 형식을 실현하는 것입니다. 여러분께 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 답장을 드리겠습니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 키워드 전체 텍스트 검색 인 스 턴 스package javaLucene; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.