2013-08-19 2 views
1

"ph1 ph2"로 검색 할 때 "ph1"또는 "ph2"가 포함 된 텍스트를 찾습니다.Lucene 샘플 질문

String line = "ph1 ph2";   
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, field, analyzer); 
Query query = parser.parse(line); 

누구나 1) 문구 ("PH1의 PH2")으로 검색하는 방법을 알고있다. 예 : 이것은 ph1 ph2 문장입니다. 2) 최대 거리를 가진 구 ("ph1 ph2 ~ 3"). 예제이 ph1은 ph2 문장입니다.

P.S 표준 Lucene Indexer를 사용하여 파일의 색인을 생성했습니다. 이 예는 확연히 볼 수 http://www.lucenetutorial.com/lucene-query-syntax.html

없는 경우 여기에 전체 코드입니다 :

String index = "C:/programs/lucenedemo/index"; 
    String field = "contents";      
    IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(index))); 
    IndexSearcher searcher = new IndexSearcher(reader); 
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40); 
    //QueryParser parser = new QueryParser(Version.LUCENE_40, field, analyzer);   
    String line = "ph1 ph2";   
    QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, field, analyzer); 
    Query query = parser.parse(line);      
    //doPagingSearch(searcher, query, hitsPerPage, raw, queries == null && queryString == null);   
    //doPagingSearch 

    TopDocs results = searcher.search(query, 300000); 
    ScoreDoc[] hits = results.scoreDocs;   
    System.out.println(results.totalHits); 

    for (int i=0;i<10;i++) {  
    Document doc = searcher.doc(hits[i].doc); 
     String path = doc.get("path"); 
     if (path != null) System.out.println((i+1) + ". " + path);       
    } 

    //end of doPagingSearch 
    reader.close(); 

답변

1

당신은 SpanQuery을 사용할 수 있습니다.

특히 SpanNearQuey를 생성하고 SpanTermQuerys의 배열, 구문의 각 절에 하나씩, "slop"또는 최대 거리를 나타내는 int를 전달할 수 있습니다. 주문해야합니다).

검색하려면 작성한 쿼리에서 getSpans 메소드를 사용하십시오.

이렇게하면 일치하는 문서의 목록이 아닌 그러한 모든 항목의 목록을 얻을 수 있습니다. 결과를 표시하는 방법에 따라 범위 전체를 반복하고 문서 등으로 그룹화해야 할 수 있습니다.

1

찾고있는 대상이 명확하지 않지만, 의 :

  • "field:\"" + line + "\"" : 간단한 구문 쿼리. 인접한 두 개의 용어를 찾습니다.

  • "field:\"" + line + "\"~3" : 기울임 꼴 구문 쿼리. 순서대로,하지만 두 가지 측면에서 세 가지 용어로 분리 할 가치가 있습니다.

  • "field:(" + line + ")" : 구문 검색 쿼리가 아닙니다. 두 용어에 대한 간단한 검색. 모든 주문 또는 거리가 허용됩니다.

당신은 루씬의 query syntax documentation

+0

감사에서 쿼리 구문 분석기에 추가 옵션 "PH1의 PH2"의 istead을 볼 수 있습니다 나는 "\"PH1의 PH2의 \ "~ 3"을 작성했다 –