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

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

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

    szhswl
    宋針還的個人空間
            參考了springside的代碼實現了高亮,其實也是很簡單的。在原來的searchController里面用的是默認的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/
    這里有兩個類AdvancedSearchCommand.java,CompassSearchService.java,CompassSearchService里面實現了高亮和排序,后來發現CompassSearchService和CompassSearchHelper長得很像,而且CompassSearchHelper也提供了兩個抽象的方法給用戶提供一個添加功能的機會。

     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 
    所以我們只要實現一個自己的CompassSearchHelper覆蓋這兩個方法就可以達到實現高亮的目的了。
     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,這樣就可以實現高亮了。修改一下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}

    本文轉自:http://jdkcn.com/entry/howto-add-highlight-in-compass.html



    ---------------------------------------------------------------------------------------------------------------------------------
    說人之短,乃護己之短。夸己之長,乃忌人之長。皆由存心不厚,識量太狹耳。能去此弊,可以進德,可以遠怨。
    http://www.tkk7.com/szhswl
    ------------------------------------------------------------------------------------------------------ ----------------- ---------
    posted on 2007-12-12 20:39 宋針還 閱讀(1773) 評論(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);
    }
    }

    應該是下面這樣吧?
    for (int i = from; i < from+size; i++) {
    for (String highlightField : highlightFields) {
    hits.highlighter(i).fragment(highlightField);
    }
    }
      回復  更多評論
      
    # re: 給Compass搜索添加高亮(highlight)
    2009-04-07 15:11 | dongzai
    當然不是這樣 size是什么你沒搞清楚@buffon
      回復  更多評論
      
    主站蜘蛛池模板: 亚州**色毛片免费观看| 国产一级淫片a免费播放口| 亚洲国产精品成人一区| 在线看片免费人成视频久网下载 | 亚洲成人动漫在线观看| 91在线视频免费91| 日韩在线视频免费| 亚洲黄色免费电影| 国产jizzjizz免费看jizz| 最新久久免费视频| 亚洲一级免费毛片| 亚洲熟妇无码乱子AV电影| 久久受www免费人成_看片中文| 免费无遮挡无码视频在线观看| 亚洲的天堂av无码| 亚洲欧洲日产国码一级毛片| 成人女人A级毛片免费软件| 精品国产免费人成网站| 亚洲天堂中文字幕在线观看| 亚洲狠狠爱综合影院婷婷| 嫖丰满老熟妇AAAA片免费看| 国产免费牲交视频免费播放| 亚洲日韩国产二区无码| 久久亚洲一区二区| 国产成人高清精品免费软件| 100部毛片免费全部播放完整| 亚洲第一第二第三第四第五第六 | 免费一级毛片在线播放放视频| 亚洲欧洲精品一区二区三区| 亚洲国产高清精品线久久| 最新欧洲大片免费在线| 国产一级婬片A视频免费观看| 日本亚洲高清乱码中文在线观看| 亚洲国产精品成人综合久久久| 亚洲中文字幕无码久久综合网| 国产性生交xxxxx免费| 午夜福利不卡片在线播放免费| 亚洲免费观看视频| jizz免费在线影视观看网站| 亚洲AV无码国产精品永久一区| 亚洲国产日产无码精品|