2012-02-22 3 views
0

현재 Lucene을 사용하여 설명 필드에 각 단어의 양을 가져 오려고합니다. F.e.Lucene의 용어 집계 필터링 (Java)

  • 설명 : ▜ᛴ᱐ #
  • OF BOX
  • 설명 : BOX 바나나

출력 :

  • BOX 2
  • 2
  • 사과 1
  • BANANAS 1

나는 단어와 빈도를 찾고있다.

내가 그 결과를 주어진 문서로 필터링하고 싶습니다. 주어진 문서의 설명 필드에있는 단어 만 계산한다는 의미입니다.

주어진 도움을 주셔서 감사합니다.

// 대답은 언급합니다 : 를 나는 이런 식으로 뭔가가 :

public ArrayList<ObjectA> GetIndexTerms(String code) { 
     try { 

      ArrayList<Object> termlist = new ArrayList<ObjectA>(); 
      indexR = IndexReader.open(path); 
      TermEnum terms = indexR.terms();   

      while (terms.next()) { 
       Term term = terms.term(); 
       String termText = term.text();      
       int frequency = indexR.docFreq(term); 
       ObjectA newObj = new ObjectA(termText, frequency); 
       termlist.add(newObj);      
       }     
      }    
      return termlist; 
     } catch (Exception ex) {    
      ex.printStackTrace(); 
      return null; 
     } 
} 

을하지만 난이 문서하여 필터링하는 방법을 볼 수 없습니다 ...


// 오늘 !

난 그게 작동하도록 얻을 수 있지만 그것을 사용하여 문서 id 및 나는 그것을 올바르게 사용할 수 없습니다. 내가 "0"이라는 쿼리를 사용했기 때문에 "i"값이 0으로 시작하고 적절한 문서 ID가 아닙니다. 제대로 작동하려면 어떤 아이디어가 필요합니까? 감사합니다.

TopDocs tp = indexS.search(query, Integer.MAX_VALUE); 
     for (int i = 0; i < tp.scoreDocs.length; i++){ 
      ScoreDoc sds = tp.scoreDocs[i]; 
      Document doc = indexS.doc(sds.doc); 
      TermFreqVector tfv = indexR.getTermFreqVector(i,"description"); 

      for (int j = 0; j < tfv.getTerms().length; j++) { 
       String item = tfv.getTerms()[j]; 
       termlist.add(new TerminoDescripcion(item.toUpperCase(), tfv.getTermFrequencies()[j])); 
      } 
     } 

답변

2

문제는 루씬은 당신이 문서를 기반으로 조건을 retrieveing ​​즉, 반대 찾고있는 반면 쉽게 용어를 기반으로 문서를 검색 할 수 있음을 의미 반전 인덱스 것입니다.

희망 사항으로, 이것은 반복되는 문제이며 Lucene은 인덱싱 할 때이 기능을 사용하도록 설정 한 경우 문서 (용어 벡터)에 대한 용어를 검색 할 수있는 기능을 제공합니다.

TermVector.YESField constructor 인덱싱 시간을 활성화하고 IndexReader 검색시 용어 벡터를 검색하는 방법을 알고을 참조하십시오.

또는 저장된 필드를 즉시 분석 할 수도 있지만, 특히 큰 필드의 경우 느려질 수 있습니다.

+0

나는 내 게시물을 편집하고 내게 당신이 말한 것과 관련하여 몇 가지 코드를 추가했습니다. 그래도 문서 ID를 얻을 수없는 것 같습니다. – TheMadCapLaughs27

+1

getTermFreqVector 호출에서 i를 sds.doc로 바꿔야합니다. – jpountz

+0

감사합니다. 괜찮습니다. (= – TheMadCapLaughs27