2013-04-09 53 views
1

我使用下面的代码,但它不能搜索的期刊文章/网页内容中的Liferay 6.1无法使用搜索UTIL

package com.abp.portlets; 

    import java.io.IOException; 

    import javax.portlet.PortletException; 
    import javax.portlet.RenderRequest; 
    import javax.portlet.RenderResponse; 

    import com.liferay.portal.kernel.search.BooleanClauseOccur; 
    import com.liferay.portal.kernel.search.BooleanQuery; 
    import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil; 
    import com.liferay.portal.kernel.search.Field; 
    import com.liferay.portal.kernel.search.Hits; 
    import com.liferay.portal.kernel.search.ParseException; 
    import com.liferay.portal.kernel.search.SearchContext; 
    import com.liferay.portal.kernel.search.SearchEngineUtil; 
    import com.liferay.portal.kernel.search.SearchException; 
    import com.liferay.portal.kernel.util.Validator; 
    import com.liferay.portal.kernel.util.WebKeys; 
    import com.liferay.portal.theme.ThemeDisplay; 
    import com.liferay.util.bridges.mvc.MVCPortlet; 

    /** 
    * Portlet implementation class Search 
    */ 
    public class Search extends MVCPortlet { 

    public void doView(RenderRequest renderRequest, RenderResponse renderResponse)throws IOException, PortletException 
    { 
     ThemeDisplay themeDisplay = (ThemeDisplay) 
       renderRequest.getAttribute(WebKeys.THEME_DISPLAY); 

     SearchContext searchContext = new SearchContext(); 
     searchContext.setSearchEngineId(SearchEngineUtil.SYSTEM_ENGINE_ID); 
     BooleanQuery contextQuery = BooleanQueryFactoryUtil.create(searchContext); 
     contextQuery.addRequiredTerm(Field.COMPANY_ID, themeDisplay.getCompanyId()); 
     contextQuery.addRequiredTerm(Field.GROUP_ID, themeDisplay.getScopeGroupId()); 

     BooleanQuery fullQuery = BooleanQueryFactoryUtil.create(searchContext); 

     String keywords = "mridul test"; 
     BooleanQuery searchQuery = BooleanQueryFactoryUtil.create(searchContext); 

        if (Validator.isNotNull(keywords)) { 
         keywords = keywords.trim(); 
         try { 
          searchQuery.addTerm(Field.TITLE, keywords,true); 


         } catch (ParseException e) { 
           // TODO Auto-generated catch block 
           e.printStackTrace(); 
          } 

        } 



        // BooleanQuery fullQuery = BooleanQueryFactoryUtil.create(searchContext); 

        //fullQuery.add(contextQuery, BooleanClauseOccur.MUST); 

    //     if (searchQuery.clauses().size() > 0) { 
    //      fullQuery.add(searchQuery, BooleanClauseOccur.MUST); 
    //     } 

     System.out.println("fullQuery===============>>"+fullQuery); 
     try { 
      fullQuery.add(searchQuery, BooleanClauseOccur.MUST); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     try { 
      Hits hits = SearchEngineUtil.search(searchContext, fullQuery); 
      for(int i=0;i<hits.getLength();i++) 
      { 
      System.out.println(hits.snippet(i).toString()); 
      } 
     } catch (SearchException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

    } 

我得到的输出是搜索杂志文章中的Liferay门户。 ..

fullQuery =============== >> +(+((标题:标题mridul:测试)))

请帮助..

回答

-1

It lo像你一样正在寻找准确的短语“mridul test”。我想你可能想要搜索“mridul”和“test”。如果是这样,给这个旋转:

String[] terms = keywords.split(" "); 
for(String term : terms){ 
    searchQuery.addTerm(Field.TITLE, term,true); 
} 
0

Lucene使用字段来索引数据。

searchQuery.addTerm(**Field.CONTENT**, keywords,true);

或者

searchQuery.addTerms(new String[]{Field.TITLE,Field.DESCRIPTION,Field.CONTENT}, keywords, true)