<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    szhswl
    宋針還的個(gè)人空間
            參考了springside的代碼實(shí)現(xiàn)了高亮,其實(shí)也是很簡單的。在原來的searchController里面用的是默認(rèn)的CompassSearchHelper來搜索的。
     1         if (searchHelper == null) {
     2             searchHelper = new CompassSearchHelper(getCompass(), getPageSize());
     3         }
     4         CompassSearchCommand searchCommand = new CompassSearchCommand();
     5         searchCommand.setPage(new Integer(currentPage-1));
     6         searchCommand.setQuery(query);
     7         ModelAndView mv = new ModelAndView();
     8         mv.addObject("query", query);
     9         mv.addObject("p", currentPage);
    10         List<String> errors = new ArrayList<String>();
    11         try{
    12             CompassSearchResults searchResults = searchHelper.search(searchCommand);
    13             mv.addObject(getSearchResultsName(), searchResults);
    14         }catch (SearchEngineQueryParseException ex){
    15             errors.add(TextUtil.escapeHTML(ex.getMessage()));
    16             mv.addObject("errors", errors);
    17         } 
    18 
    本來打算按照springside里面的封裝方法。
    http://svn.javascud.org/svn/springside/springside2/trunk/core/src/java/org/springside/components/compass/
    這里有兩個(gè)類AdvancedSearchCommand.java,CompassSearchService.java,CompassSearchService里面實(shí)現(xiàn)了高亮和排序,后來發(fā)現(xiàn)CompassSearchService和CompassSearchHelper長得很像,而且CompassSearchHelper也提供了兩個(gè)抽象的方法給用戶提供一個(gè)添加功能的機(jī)會(huì)。

     1     /**
     2      * An option to perform any type of processing before the hits are detached.
     3      */
     4     protected void doProcessBeforeDetach(CompassSearchCommand searchCommand, CompassSession session, CompassHits hits,
     5                                          int from, int size) {
     6 
     7     }
     8 
     9     /**
    10      * An option to perform any type of processing after the hits are detached.
    11      */
    12     protected void doProcessAfterDetach(CompassSearchCommand searchCommand, CompassSession session,
    13                                         CompassDetachedHits hits) {
    14 
    15     } 
    16 
    所以我們只要實(shí)現(xiàn)一個(gè)自己的CompassSearchHelper覆蓋這兩個(gè)方法就可以達(dá)到實(shí)現(xiàn)高亮的目的了。
     1 /**
     2  * @author <a href="mailto:rory.cn@gmail.com">somebody</a>
     3  * @since Aug 23, 2007 2:04:19 PM
     4  * @version $Id AdvanceCompassSearchHelper.java$
     5  */
     6 public class AdvanceCompassSearchHelper extends CompassSearchHelper {
     7 
     8     private String[] highlightFields;
     9 
    10     public String[] getHighlightFields() {
    11         return highlightFields;
    12     }
    13 
    14     public void setHighlightFields(String[] highlightFields) {
    15         this.highlightFields = highlightFields;
    16     }
    17 
    18     /**
    19      * @param compass
    20      */
    21     public AdvanceCompassSearchHelper(Compass compass) {
    22         super(compass);
    23     }
    24     
    25 
    26     /* (non-Javadoc)
    27      * @see org.compass.core.support.search.CompassSearchHelper#doProcessBeforeDetach(org.compass.core.support.search.CompassSearchCommand, org.compass.core.CompassSession, org.compass.core.CompassHits, int, int)
    28      */
    29     @Override
    30     protected void doProcessBeforeDetach(CompassSearchCommand searchCommand,
    31             CompassSession session, CompassHits hits, int from, int size) {
    32         if (from < 0) {
    33             from = 0;
    34             size = hits.getLength();
    35         }
    36 
    37         if (highlightFields == null) {
    38             return;
    39         }
    40         // highlight fields
    41         for (int i = from; i < size; i++) {
    42             for (String highlightField : highlightFields) {
    43                 hits.highlighter(i).fragment(highlightField);
    44             }
    45         }
    46     } 
    47 
    ok,這樣就可以實(shí)現(xiàn)高亮了。修改一下SearchController的配置。
     1     <bean id="advanceCompassSearchHelper" class="com.jdkcn.compass.AdvanceCompassSearchHelper">
     2         <property name="highlightFields">
     3             <list>
     4                 <value>content</value>
     5             </list>
     6         </property>
     7         <property name="pageSize"><value>10</value></property>
     8         <constructor-arg ref="compass"/>
     9     </bean>
    10      
    11     <bean id="searchController" class="com.jdkcn.web.SearchController" parent="baseController">
    12         <property name="compass"><ref bean="compass"/></property>
    13         <property name="searchView"><value>search</value></property>
    14         <property name="searchResultsView"><value>search</value></property>
    15         <property name="pageSize"><value>10</value></property>
    16         <property name="searchHelper"><ref local="advanceCompassSearchHelper"/></property>
    17     </bean> 
    18 
    還不要忘了修改一下compass settings 修改一下高亮的樣式,修改一下高亮的顏色。
     1     <bean id="compass" class="org.compass.spring.LocalCompassBean">
     2         <property name="resourceDirectoryLocations">
     3             <list>
     4                 <value>classpath:com/jdkcn/compass</value>
     5             </list>
     6         </property>
     7         <property name="connection">
     8             <value>/lucene/indexes</value>
     9         </property>
    10         <property name="compassSettings">
    11             <props>
    12                 <prop key="compass.transaction.factory">
    13                     org.compass.spring.transaction.SpringSyncTransactionFactory
    14                 </prop>
    15                 <prop key="compass.engine.highlighter.default.formatter.simple.pre">
    16                     <![CDATA[<font color="red"><b>]]>
    17                 </prop>
    18                 <prop key="compass.engine.highlighter.default.formatter.simple.post">
    19                     <![CDATA[</b></font>]]>
    20                 </prop>
    21             </props>
    22         </property>
    23         <property name="transactionManager">
    24             <ref bean="transactionManager" />
    25         </property>
    26     </bean> 
    27 
    ok了,頁面上輸出一下就能看到最終效果了${hit.highlightedText['content']?if_exists}

    本文轉(zhuǎn)自:http://jdkcn.com/entry/howto-add-highlight-in-compass.html



    ---------------------------------------------------------------------------------------------------------------------------------
    說人之短,乃護(hù)己之短。夸己之長,乃忌人之長。皆由存心不厚,識(shí)量太狹耳。能去此弊,可以進(jìn)德,可以遠(yuǎn)怨。
    http://m.tkk7.com/szhswl
    ------------------------------------------------------------------------------------------------------ ----------------- ---------
    posted on 2007-12-12 20:39 宋針還 閱讀(1773) 評(píng)論(2)  編輯  收藏 所屬分類: 搜索引擎

    FeedBack:
    # re: 給Compass搜索添加高亮(highlight)
    2008-01-12 13:56 | buffon
    for (int i = from; i < size; i++) {
    for (String highlightField : highlightFields) {
    hits.highlighter(i).fragment(highlightField);
    }
    }

    應(yīng)該是下面這樣吧?
    for (int i = from; i < from+size; i++) {
    for (String highlightField : highlightFields) {
    hits.highlighter(i).fragment(highlightField);
    }
    }
      回復(fù)  更多評(píng)論
      
    # re: 給Compass搜索添加高亮(highlight)
    2009-04-07 15:11 | dongzai
    當(dāng)然不是這樣 size是什么你沒搞清楚@buffon
      回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: CAOPORN国产精品免费视频| 亚洲国产精品综合久久网各| 久久精品亚洲乱码伦伦中文| 亚洲精品动漫人成3d在线| 亚洲成av人片天堂网老年人| 亚洲第一视频在线观看免费| 免费又黄又爽又猛的毛片| 国产精品亚洲αv天堂无码| 亚洲日韩在线中文字幕第一页| 亚洲精品视频在线看| 亚洲色无码专区在线观看| 亚洲精品无码鲁网中文电影| 久久精品视频亚洲| 亚洲精品**中文毛片| 国产午夜亚洲精品| 337P日本欧洲亚洲大胆艺术图| 四虎精品免费永久免费视频| 国产乱妇高清无乱码免费| 麻豆精品成人免费国产片| 57pao国产成视频免费播放| 国产福利在线观看免费第一福利| 最近2019中文字幕mv免费看| 免费大香伊蕉在人线国产 | 一区二区在线视频免费观看| 成人无码精品1区2区3区免费看| 免费国产99久久久香蕉| 国内精品免费麻豆网站91麻豆| 成年女人毛片免费播放人| 亚洲av中文无码| 亚洲AV无码成人精品区蜜桃| 亚洲永久中文字幕在线| 看亚洲a级一级毛片| a级日本高清免费看| 在线视频精品免费| 日韩亚洲国产综合久久久| 亚洲国产精品VA在线观看麻豆| 亚洲一区二区久久| 免费一级做a爰片久久毛片潮| 日本一区二区免费看| 成年男女男精品免费视频网站| gogo全球高清大胆亚洲|