一、修改 solr-7.3.1\server\solr\articles【创建的core的名称】\conf\managed-schema文件
1、增加中文的分词器:
<fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
</fieldType>
2、增加字段名,指定text_cn类型:<field name="cnname" type="text_cn" indexed="true" stored="true" required="true" multiValued="false" />
3、pom引入jiar
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
</dependency>
二、java代码如下:
package com.silverbox.solr;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.FieldAnalysisRequest;
import org.apache.solr.client.solrj.response.AnalysisResponseBase.AnalysisPhase;
import org.apache.solr.client.solrj.response.AnalysisResponseBase.TokenInfo;
import org.apache.solr.client.solrj.response.FieldAnalysisResponse;
/**
* @Author:sks
* @Description:利用solr分词组件进行分词
* @Date:Created in 14:07 2017/12/14
* @Modified by:
**/
public class splitwords {
public static void main(String []args) throws SolrServerException, IOException{
String urlString = "http://localhost:6789/solr/mote";
Init(urlString);
String txt = "全党同志一定要登高望远、居安思危,勇于变革、勇于创新,永不僵化、永不停滞,团结带领全国各族人民决胜全面建成小康社会,奋力夺取新时代中国特色社会主义伟大胜利";
List<String> results = getAnalysis(txt);
for(String word :results){
System.out.println(word);
}
}
private static SolrClient solr;
/**
* @Author:sks
* @Description:初始化solr客户端
* @Date:
*/
public static void Init(String urlString){
// solr = new HttpSolrClient.Builder(urlString).build();
//HttpSolrClient solr = null;
solr = new HttpSolrClient(urlString);
}
/**
* @Author:sks
* @Description:分词统计,把字符串分词并返回分词列表
* @Date:
*/
public static List<String> getAnalysis(String sentence) {
FieldAnalysisRequest request = new FieldAnalysisRequest(
"/analysis/field");
request.addFieldName("cnname");// 字段名,随便指定一个支持中文分词的字段
request.setFieldValue("");// 字段值,可以为空字符串,但是需要显式指定此参数
request.setQuery(sentence);
FieldAnalysisResponse response = null;
try {
response = request.process(solr);
} catch (Exception e) {
e.printStackTrace();
}
List<String> results = new ArrayList<String>();
Iterator<AnalysisPhase> it = response.getFieldNameAnalysis("cnname")
.getQueryPhases().iterator();
while(it.hasNext()) {
AnalysisPhase pharse = (AnalysisPhase)it.next();
List<TokenInfo> list = pharse.getTokens();
for (TokenInfo info : list) {
results.add(info.getText());
}
}
return results;
}
}
执行结果:
全党
同志
一定
要
登高望远
,
居安思危
,
勇于
变革
,
勇于
创新
,
永不
僵化
,
永不
停滞
,
团结
带领
全国
各族
人民
决胜
全面
建成
小康
社会
,
奋力
夺取
新
时代
中国
特色
社会主义
伟大
胜利
网友评论