2015-10-06 4 views
0

Этот код индексы массива строк в поляхLucene поиск все поля

for (int i =0; i < fileFields.length; i++) 
      { 
       Field field = new Field("field" + String.valueOf(i + 1), 
         fileFields[i], 
         Field.Store.YES,Field.Index.NOT_ANALYZED); 
       document.add(field);         
      } 

я хочу искать по всем полям и печатать поля, которые соответствуют я попробовал этот код, но он не работает, как нужно

private void searchUsingPhraseQuery(String[] phrases) 
        throws IOException, ParseException{ 
        searcher = new Searcher(indexDir); 
        long startTime = System.currentTimeMillis();                 

        PhraseQuery query = new PhraseQuery(); 
        query.setSlop(0); 

        for(String word:phrases){ 
        query.add(new Term(LuceneConstants.CONTENTS,word)); 
        }        

        //do the search 
        TopDocs hits = searcher.search(query); 
        long endTime = System.currentTimeMillis(); 

        System.out.println(hits.totalHits + 
        " Phrases found. Time :" + (endTime - startTime) + "ms"); 
        int i = 1; 
        for(ScoreDoc scoreDoc : hits.scoreDocs) { 
        Document doc = searcher.getDocument(scoreDoc); 
        System.out.println("Phrase: "+ doc.get("field" + String.valueOf(i))); 
        i++; 
        } 
        searcher.close(); 
       } 
+0

Возможный дубликат [Multiple поля запроса обработки в Lucene] (http://stackoverflow.com/questions/15728569/multiple -field-запрос-обращение-в-Lucene) – user1071777

ответ

0

Я использовал этот код для индекса

for (String field: fileFields) 
      {    
       indexParagraph(field); 
      } 

.

public void indexParagraph(String paragraph) throws IOException{    
       System.out.println("Indexing paragraph " + "\n" + paragraph); 
       Document document = getDocument(paragraph); 
       writer.addDocument(document); 
      } 

.

private Document getDocument(String paragraph) 
     { 
      Document document = new Document(); 
      Field paragraphContents = new Field(LuceneConstants.paragraph, 
      paragraph, Field.Store.YES, Field.Index.ANALYZED); 
      document.add(paragraphContents);   
     return document;   
     } 

и этот код для поиска

private void sortUsingRelevance(String searchQuery) 
      throws IOException, ParseException 
    { 
     searcher = new Searcher(indexDir); 
     long startTime = System.currentTimeMillis(); 

     //create a term to search file name 
     Term term = new Term(LuceneConstants.paragraph, searchQuery); 
     //create the term query object 
     Query query = new FuzzyQuery(term); 
     searcher.setDefaultFieldSortScoring(true, false); 
     //do the search 
     TopDocs hits = searcher.search(query, Sort.RELEVANCE); 
     long endTime = System.currentTimeMillis(); 

     System.out.println(hits.totalHits 
       + " documents found. Time :" + (endTime - startTime) + "ms"); 
     DefaultListModel listModel = new DefaultListModel(); 
     for (ScoreDoc scoreDoc : hits.scoreDocs) { 

      Document doc = searcher.getDocument(scoreDoc); 
      listModel.addElement(doc.get(LuceneConstants.paragraph)); 
      jList1.setModel(listModel); 

     } 
     searcher.close(); 
    } 

и работал

Смежные вопросы