solr聚類

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免費學習交流羣:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章