2009-09-02 4 views
1

다양한 섹션이있는 큰 문서가 있습니다. 각 섹션에는 관심있는 키워드/구문 목록이 있습니다. 문자열 배열로 저장된 키워드/구문의 마스터 목록이 있습니다. Solr 또는 Lucene을 사용하여 각 섹션 문서에서 모든 키워드를 검색하고 기본적으로 어떤 키워드를 찾았는지 알려줄 수 있습니까? 나는 프로그램 실행, 당신은,이 색인 방법 루씬 인덱스 도움이 배울 했 basics키워드 목록을 검색하여 존재 여부를 확인하십시오.

감사

에게 ....이를 구현하기 위해 어떤 간단한 방법의
+0

책 색인 색인을 만들려고하십니까? 이것은 일회성 실행입니까, 아니면 시간이 지남에 따라 색인을 검색합니까? 귀하가 의미하는 바를 간략히 예를 들어주십시오 (두 섹션, 각 키워드 당 두 개의 키워드, 필요한 입/출력). –

답변

1

시작을 생각하지 못할 필드가 포함 된 문서를 검색하고

필드가 stored 일 필요가있는 데이터를 결정하십시오. 즉; DateFields는 = 대신 지금의 다음 단계

//indexmap ==> HashMap 
//keywordfields ==> you master list of keywords/phrases 
//selectfields ==> your document field (contained in lucene index) 
String[] keywordfields = (String[]) indexmap.get("keywordfields").toString().split(","); 
String[] selectFields = (String[]) indexmap.get("indexfields").toString().split(","); 
//create a booleanquery 
BooleanQuery bq = new BooleanQuery(); 
//iterate the keywordfields 
for (int i = 0; i < keywordfields.length; i++) { 
    bq.add(new BooleanClause(new TermQuery(new Term(keywordfields[i], (String)params.get(SEARCH_QUERYSTRING))),BooleanClause.Occur.SHOULD)); 
       } 
//pass the boolean query object to the indexsearcher 
topDocs = indexSearcher.search(rq, 1000); 
//get a reference to ScoreDoc 
ScoreDoc[] hits = topDocs.scoreDocs; 
//Iterate the hits 

    Map <String, Object> resultMap = new HashMap<String, Object>(); 
    List<Map<String, String>> resultList = new ArrayList<Map<String, String>>(); 
        for (ScoreDoc scoreDoc : hits) { 
        int docid = scoreDoc.doc; 
        FieldSelector fieldselector = new MapFieldSelector(selectFields); 
        Document doc = indexSearcher.doc(docid, fieldselector); 

        Map<String, String> searchMap = new HashMap<String, String>(); 
        // get all fields for documents we got 
        List<Field> fields = doc.getFields(); 
        for (Field field : fields) { 
         searchMap.put(field.name(), field.stringValue()); 
         System.out.println("Field Name:" + field.name()); 
         System.out.println("Field value:" + field.stringValue()); 
        } 
        resultList.add(searchMap); 
        resultMap.put(TOTAL_RESULTS, hits.length); 
        resultMap.put(RS, resultList); 
       }    
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

이 루씬을 사용하여 구현 중 하나 일 것이다한다

Field.Index.ANALYZED Field.Index.NOT_ANALYZED를 저장한다

+0

감사합니다. 우리는 솔르를 중심으로 결정했습니다. 누군가 Solrj를 사용하여 Solr의 예를 친절하게 제공 할 수 있습니까? 내 키워드는 5 키까지 1 키 (예 : Solr) 또는 2 키 (예 : Apache Lucene) 일 수 있습니다 (예 : Apache Lucene Web Service Deploy) –

0

Lucene의 분석 기능은 모두 알고있는 것처럼 들립니다. 이 기능의 핵심은 Analyzer 클래스입니다. 문서에서 :

분석기는 텍스트를 분석하는 TokenStreams를 빌드합니다. 따라서 텍스트에서 색인 용어를 추출하는 정책을 나타냅니다.

이 선택할 수있는 많은 Analyzer 클래스가 있지만 StandardAnalyzer은 일반적으로 좋은 일을 : 당신은 당신의 목적을 위해 더 나은 일을 할 것입니다 다른 분석기을 찾을 수

// For each chapter... 

Reader reader = ...; // You are responsible for opening a reader for each chapter 
Analyzer analyzer = new StandardAnalyzer(); 
TokenStream tokenStream = analyzer.tokenStream("", reader); 

Token token = new Token(); 
while ((token = tokenStream.next(token)) != null)) { 
    String keyword = token.term(); 
    // You can now do whatever you wish with this keyword 
} 

.

관련 문제