码迷,mamicode.com
首页 > 其他好文 > 详细

solr自动聚类

时间:2015-06-03 19:07:10      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

Solr 使用Carrot2完成了聚类功能,能够把检索到的内容自动分类, Carrot2聚类示例:
技术分享 



       要想Solr支持聚类功能,首选要把Solr发行包的中的dist/ solr-clustering-4.2.0.jar, 复制到\solr\contrib\analysis-extras\lib下.然后打开solrconfig.xml进行添加配置:

 

        
<searchComponent name="clustering"
   
                      enable="${solr.clustering.enabled:true}"
   
                      class="solr.clustering.ClusteringComponent" >
   
    <lst    name="engine">
   
        <str    name="name">default</str>
   
        <str    name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
   
        <str    name="LingoClusteringAlgorithm.desiredClusterCountBase">30</str><!--2~100-->
   
         <str    name="LingoClusteringAlgorithm.clusterMergingThreshold">0.70</str><!--0~1-->
   
         <str name="LingoClusteringAlgorithm.scoreWeight">0</str><!--0~1-->
   
         <str    name="LingoClusteringAlgorithm.labelAssigner">org.carrot2.clustering.lingo.SimpleLabelAssigner</str><!--org.carrot2.clustering.lingo.UniqueLabelAssigner    -->
   
          <str    name="LingoClusteringAlgorithm.phraseLabelBoost">1.5</str><!--0~10-->
   
         <str    name="LingoClusteringAlgorithm.phraseLengthPenaltyStart">8</str><!--2~8-->
   
         <str    name="LingoClusteringAlgorithm.phraseLengthPenaltyStop">8</str><!--2~8-->
    
   
         <str    name="TermDocumentMatrixReducer.factorizationQuality">HIGH</str><!--LOW,MEDIUM,HIGH-->
   
         <!--
   
         org.carrot2.matrix.factorization.PartialSingularValueDecompositionFactory   
   
         org.carrot2.matrix.factorization.NonnegativeMatrixFactorizationEDFactory   
   
         org.carrot2.matrix.factorization.NonnegativeMatrixFactorizationKLFactory   
   
         org.carrot2.matrix.factorization.LocalNonnegativeMatrixFactorizationFactory   
   
         org.carrot2.matrix.factorization.KMeansMatrixFactorizationFactory   
   
         -->
   
         <str    name="TermDocumentMatrixReducer.factorizationFactory">org.carrot2.matrix.factorization.NonnegativeMatrixFactorizationEDFactory</str>
   
         <str    name="TermDocumentMatrixBuilder.maximumMatrixSize">37500</str><!--MinValue5000-->
   
         <str    name="TermDocumentMatrixBuilder.titleWordsBoost">2.0</str><!--2~10-->
   
         <str name="TermDocumentMatrixBuilder.maxWordDf">0.9</str><!--0~1-->
   
          <!--org.carrot2.text.vsm.LogTfIdfTermWeighting,org.carrot2.text.vsm.LinearTfIdfTermWeighting-->
   
         <str    name="TermDocumentMatrixBuilder.termWeighting">org.carrot2.text.vsm.TfTermWeighting</str>
   
         <str    name="MultilingualClustering.defaultLanguage">CHINESE_SIMPLIFIED</str>
   
         <str    name="MultilingualClustering.languageAggregationStrategy">org.carrot2.text.clustering.MultilingualClustering.LanguageAggregationStrategy.FLATTEN_MAJOR_LANGUAGE    </str><!--FLATTEN_ALL,FLATTEN_NONE-->
   
         <str    name="GenitiveLabelFilter.enabled">true</str>
   
         <str    name="StopWordLabelFilter.enabled">true</str>
   
         <str    name="NumericLabelFilter.enabled">true</str>
   
         <str    name="QueryLabelFilter.enabled">true</str>
   
         <str    name="MinLengthLabelFilter.enabled">true</str>
   
         <str    name="StopLabelFilter.enabled">true</str>
   
         <str    name="CompleteLabelFilter.enabled">true</str>
   
         <str    name="CompleteLabelFilter.labelOverrideThreshold">0.65</str><!--0~1-->
   
         <str    name="DocumentAssigner.exactPhraseAssignment">false</str>
   
         <str    name="DocumentAssigner.minClusterSize">2</str><!--1~100-->
   
         <str    name="merge-resources">true</str>
   
         <str    name="CaseNormalizer.dfThreshold">1</str><!--1~100-->
   
         <str    name="PhraseExtractor.dfThreshold">1</str><!--1~100-->
   
         <str    name="carrot.lexicalResourcesDir">clustering/carrot2</str>
   
         <str    name="SolrDocumentSource.solrIdFieldName">id</str>
   
    </lst>
   
     </searchComponent>
    
   

    

       配好了聚类组件后,下面配置requestHandler:

 

        
  <requestHandler    name="/clustering"
   
                  startup="lazy"
   
                     enable="${solr.clustering.enabled:true}"
   
                     class="solr.SearchHandler">
   
   <lst name="defaults">
   
    <str    name="echoParams">explicit</str>
   
    <bool    name="clustering">true</bool>
   
    <str    name="clustering.engine">default</str>
   
    <bool    name="clustering.results">true</bool>
   
    <str    name="carrot.title">category_s</str>
   
    <str name="carrot.snippet">content</str>        
   
    <str    name="carrot.url">path</str>
   
    <str    name="carrot.produceSummary">true</str>
   
  </lst>
   
  <arr    name="last-components">
   
    <str>clustering</str>
   
  </arr>
   
  </requestHandler>
    
   

    

       有两个参数要注意carrot.title,carrot.snippet是聚类的比较计算字段,这两个参数必须是stored="true".carrot.title的权重要高于carrot.snippet,如果只有一个做计算的字段carrot.snippet可以去掉(是去掉不是值为空).设完了用下面的URL就可以查询了
http://localhost:8080/skyCore/clustering?q=*%3A*&wt=xml&indent=true
更多精彩内容请关注:http://bbs.superwu.cn  
关注超人学院微信二维码:技术分享
关注超人学院java免费学习交流群:技术分享

solr自动聚类

标签:

原文地址:http://www.cnblogs.com/CRXY/p/4549592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!