参考官网:https://lucene.apache.org/solr/guide/6_6/result-clustering.html

  最近用到solr自聚类的,先简单介绍如下:

  1、配置文件

    主要配置文件必须配置如下内容:

<lib dir="${solr.install.dir:../../..}/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../..}/dist/" regex="solr-clustering-\d.*\.jar" />

    

<searchComponent name="clustering" enable="${solr.clustering.enabled:true}" class="solr.clustering.ClusteringComponent">
<!-- Lingo clustering algorithm -->
<lst name="engine">
<str name="name">lingo</str>
<!--<bool name="optional">true</bool>-->
<str name="carrot.algorithm">org.carrot2.clustering.lingo.LingoClusteringAlgorithm</str>
<str name="carrot.resourcesDir">clustering/carrot2</str>
</lst> <!-- An example definition for the STC clustering algorithm. -->
<lst name="engine">
<str name="name">stc</str>
<bool name="optional">true</bool>
<str name="carrot.algorithm">org.carrot2.clustering.stc.STCClusteringAlgorithm</str>
<str name="carrot.resourcesDir">clustering/carrot2</str>
</lst> <lst name="engine">
<str name="name">kmeans</str>
<!--<bool name="optional">true</bool>-->
<str name="carrot.algorithm">org.carrot2.clustering.kmeans.BisectingKMeansClusteringAlgorithm</str>
<str name="carrot.resourcesDir">clustering/carrot2</str>
</lst>
</searchComponent>

    下面的配置文件根据自己的实际情况进行修改:

 <requestHandler name="/clustering"
startup="lazy"
class="solr.SearchHandler">
<lst name="defaults">
<bool name="clustering">true</bool>
<bool name="clustering.results">true</bool> <!-- Field name with the logical "title" of a each document (optional) -->
<str name="carrot.title">keyword</str>
<!-- Logical field to physical field mapping. -->
<str name="carrot.url">id</str>
<!-- Field name with the logical "content" of a each document (optional) -->
<str name="carrot.snippet">summary</str>
<!-- Apply highlighter to the title/ content and use this for clustering. -->
<bool name="carrot.produceSummary">true</bool>
<!-- the maximum number of labels per cluster -->
<!--<int name="carrot.numDescriptions">5</int>-->
<!-- produce sub clusters -->
<bool name="carrot.outputSubClusters">false</bool> <!-- Configure any other request handler parameters. We will cluster the
top 100 search results so bump up the 'rows' parameter. -->
<!--<str name="defType">edismax</str>
<str name="qf">
text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4
</str>
<str name="q.alt">*:*</str>-->
<str name="defType">edismax</str>
<!--<str name="qf">
summary^0.5 category^1.2 id^10.0
</str>-->
<str name="qf">keyword^0.5 title^1.2 id^10.0</str>
<str name="rows">100</str>
<str name="fl">*,score</str>
</lst> <!-- Append clustering at the end of the list of search components. -->
<arr name="last-components">
<str>clustering</str>
</arr>
</requestHandler>

    managed-schema配置文件包含以下内:

   

 <fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
<field name="text" type="text_ik" multiValued="false" indexed="true" stored="true" termVectors ="true"/>
<field name="title" type="text_ik" multiValued="false" indexed="true" stored="true" />
<field name="snippet" type="text_ik" multiValued="false" indexed="true" stored="true" />
<field name="keyword" type="text_ik" multiValued="false" indexed="true" stored="true" />
<field name="category" type="text_ik" multiValued="false" indexed="true" stored="true" />
<field name="summary" type="text_ik" multiValued="false" indexed="true" stored="true"/>
<field name="path" type="string" multiValued="false" indexed="true" stored="true"/>

    注意:text_ik对应的分词组件,要引用对应的jar包,具体参见:http://www.cnblogs.com/shaosks/p/8204615.html

  2、测试索引的文件

    启动solr服务,在浏览器输入:http://localhost:8983/solr/mycore/clustering?q=*:*&rows=10

    结果如下:

    

  3、java查询代码

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.Cluster;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.ClusteringResponse;
import org.apache.solr.common.SolrDocument; import java.io.IOException;
import java.util.List; /**
* @Author:sks
* @Description:
* @Date:Created in 9:41 2018/1/18
* @Modified by:
**/
public class AutoCluster { private static SolrClient solr; /**
* @Author:sks
* @Description:初始化solr客户端
* @Date:
*/
public static void Init(String urlString){ solr = new HttpSolrClient.Builder(urlString).build();
}
public static void main(String[] args) throws SolrServerException,IOException { String urlString = "http://localhost:8983/solr/mycore";
String path = "D:/work/Solr/ImportData"; Init(urlString);
getAutoClusterInfo();
System.exit(0);
} /**
* @Author:sks
* @Description:获取聚类数据
* @Date:
*/
private static void getAutoClusterInfo() throws SolrServerException,IOException {
//使用这个对象做查询
SolrQuery params = new SolrQuery();
//查询所有数据
params.set("qt", "/clustering");
params.setQuery("*:*");
params.setStart(0);
params.setRows(30); QueryResponse queryResponse = solr.query(params);
ClusteringResponse clr = queryResponse.getClusteringResponse();
List<Cluster> list = clr.getClusters();
//拿到聚类数据集合,返回查询结果 String txt = "";
for(Cluster c :list){
//类别标签
List<String> lblist = c.getLabels();
for(String lb:lblist){
System.out.println(lb);
}
//聚类文档ID
List<String> doclist = c.getDocs();
for(String doc:doclist){
System.out.println(" " + doc);
}
} } }

    查询结果如下:

  

    

solr 自聚类实现的更多相关文章

  1. Solr调研总结

    http://wiki.apache.org/solr/ Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境 ...

  2. solr教程,值得刚接触搜索开发人员一看

    http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍sol ...

  3. Solr总结

    http://www.cnblogs.com/guozk/p/3498831.html Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注 ...

  4. 【转载】solr教程,值得刚接触搜索开发人员一看

    转载:http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍 ...

  5. Solr调研总结(转)

    Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试.两个核心配置文件介绍.中文分词器配置.维护索引 ...

  6. Solr调研总结(很详细很全面)

    Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在 ...

  7. solr入门教程-较详细

    Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在 ...

  8. Lucene/Solr搜索引擎开发笔记 - 第1章 Solr安装与部署(Jetty篇)

    一.为何开博客写<Lucene/Solr搜索引擎开发笔记> 本人毕业于2011年,2011-2014的三年时间里,在深圳前50强企业工作,从事工业控制领域的机器视觉方向,主要使用语言为C/ ...

  9. 1.7.1 solr Searching概述

    1. Overview of Searching in Solr 在用户运行一个solr搜索时,搜索查询会被request handler处理.一个request handler就是一个请求处理插件, ...

随机推荐

  1. VS Code js编译支持alias

    VS Code 的编译器 其实就是使用的 typescript 编译器,就是以前提到过的 tsserver.js 相应的编译参数可以参考 http://www.typescriptlang.org/d ...

  2. 3.spark streaming Job 架构和容错解析

    一.Spark streaming Job 架构 SparkStreaming框架会自动启动Job并每隔BatchDuration时间会自动触发Job的调用. Spark Streaming的Job ...

  3. keycloack docker 本地运行

    参考github地址:https://github.com/jboss-dockerfiles/keycloak 首先使用git 下载该项目 使用docker-compose运行项目,需要进入至doc ...

  4. 网易2019校招C++研发工程师笔试编程题

    丰收? (忘了题目了QAQ) 题目描述: 又到了丰收的季节,恰逢小易去牛牛的果园里游玩. 牛午常说他对整个果园的每个地方都了如指掌,小易不太相信, 所以他想考考牛牛. 在果园里有N堆苹果,每堆苹果的数 ...

  5. shell脚本学习(五)

    流程控制 先说几个注意的地方 1)注意你是在unix下编程,注意文件的编码如果你发现报错请用notepad++打开,编辑->文档格式转换->点unix,然后再上传运行即可 2)sh的流程控 ...

  6. 关于php的session.serialize_handler的问题

    前言 php的session信息是储存在文件中的 session.save_path="" 指定储存的路径 session.save_handler="" 指定 ...

  7. 洛谷——P1208 [USACO1.3]混合牛奶 Mixing Milk

    P1208 [USACO1.3]混合牛奶 Mixing Milk 题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业 ...

  8. Linux命令之route

    route [-CFvnNee] [-A family] [-4|-6] route [-v] [-A family] [-4|-6] add [-net|-host] target [netmask ...

  9. (转)求质数算法的N种境界[1] - 试除法和初级筛法

    ★引子 前天,俺在<俺的招聘经验[4]:通过笔试答题能看出啥?>一文,以"求质数"作为例子,介绍了一些考察应聘者的经验.由于本文没有政治敏感内容,顺便就转贴到俺在CSD ...

  10. DP套DP

    DP套DP,就是将内层DP的结果作为外层DP的状态进行DP的方法. [BZOJ3864]Hero meet devil 对做LCS的DP数组差分后状压,预处理出转移数组,然后直接转移即可. tr[S] ...