elasticsearch java api 使用ik 分词器
来源:互联网 发布:淘宝客服名字大全 编辑:程序博客网 时间:2024/05/22 15:54
本文主要说明如何在java中使用 ik 分词器
安装分词器见:elasticsearch 安装 analysis-ik
ElasticSearch java API–创建mapping
package Index;import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;import org.elasticsearch.client.Client;import org.elasticsearch.client.Requests;import org.elasticsearch.common.xcontent.XContentBuilder;import org.elasticsearch.common.xcontent.XContentFactory;import Client.ServerClient;public class createIndex { private static Client client=ServerClient.getClient(); /** * 创建索引名称 * @param indices 索引名称 */ public static void createCluterName(String indices){ client.admin().indices().prepareCreate(indices).execute().actionGet(); client.close(); } /** * 创建mapping(feid("indexAnalyzer","ik")该字段分词IK索引 ;feid("searchAnalyzer","ik")该字段分词ik查询;具体分词插件请看IK分词插件说明) * @param indices 索引名称; * @param mappingType 索引类型 * @throws Exception */ public static void createMapping(String indices,String mappingType)throws Exception{ new XContentFactory(); XContentBuilder builder=XContentFactory.jsonBuilder() .startObject() .startObject(indices) .startObject("properties") .startObject("id").field("type", "integer").field("store", "yes").endObject() .startObject("kw").field("type", "string").field("store", "yes").field("indexAnalyzer", "ik").field("searchAnalyzer", "ik").endObject() .startObject("edate").field("type", "date").field("store", "yes").field("indexAnalyzer", "ik").field("searchAnalyzer", "ik").endObject() .endObject() .endObject() .endObject(); PutMappingRequest mapping = Requests.putMappingRequest(indices).type(mappingType).source(builder); client.admin().indices().putMapping(mapping).actionGet(); client.close(); } public static void main(String[] args)throws Exception { createMapping("lianan", "lianan"); createCluterName("lianan"); }}//field("store", "yes")并不是必需的,但是field("type", "string")是必需要存在的,不然会报错。
注:分词是没有结果的,所以存入的字符串还是我们写入的,只是在查询时会去调用对应的分词器去处理
java中调用ik去分词
java查询分词结果
IndicesAdminClient indicesAdminClient = ElasticFactory.getClient().admin().indices();AnalyzeRequestBuilder request = new AnalyzeRequestBuilder(indicesAdminClient,"cloud_repair","中华人民共和国国歌");// request.setAnalyzer("ik");request.setTokenizer("ik");// Analyzer(分析器)、Tokenizer(分词器)List listAnalysis = request.execute().actionGet().getTokens();System.out.println(listAnalysis);// listAnalysis中的结果就是分词的结果
查询
for (AnalyzeResponse.AnalyzeToken term : listAnalysis) { System.out.print(term.getTerm()); System.out.print(','); queryBuilder.should(QueryBuilders.queryString(term.getTerm()).field("search_keys_ik")); //这里可以用must 或者 should 视情况而定}System.out.print('\n');
分词结果 listAnalysis 中的内容和 RestApi 中的结果一样
分词器和分析器
Analyzer(分析器)、Tokenizer(分词器)这两个概念以后弄懂了再发出来,可以参考其它文章去了解。
在IK中,只有Tokenizer。Analyzer只是构造了一个Tokenizer去处理的。见源码: org.wltea.analyzer.lucene.IKAnalyzer
此类中有一个覆盖方法:
/** * 重载Analyzer接口,构造分词组件 */ @Override protected TokenStreamComponents createComponents(String fieldName, final Reader in) { Tokenizer _IKTokenizer = new IKTokenizer(in , settings, environment); return new TokenStreamComponents(_IKTokenizer); }
参考原文:
- elasticsearch mapping
- ElasticSearch java API–创建mapping
- solr学习之六——–Analyzer(分析器)、Tokenizer(分词器)
- Lucene源码解析–Analyzer之Tokenizer
- 全文检索的几个重要概念: Analyzer, tokenizer, token filter, char filter
0 0
- elasticsearch java api 使用ik 分词器
- Elasticsearch中使用ik分词器 java api
- java api访问elasticsearch下ik-pinyin分词基本使用
- ElasticSearch 安装和使用IK分词器
- elasticsearch 配置ik分词器
- Elasticsearch 集成IK分词器
- elasticsearch配置ik分词器
- elasticsearch 安装ik 分词器
- elasticSearch安装ik分词器
- Elasticsearch集成ik分词器
- Elasticsearch安装IK分词器
- elasticsearch ik分词器安装
- elasticsearch安装ik分词器
- Elasticsearch安装IK分词器
- Elasticsearch 安装ik分词器
- 在elasticsearch 的Java客户端使用IK分词器的问题解决
- Elasticsearch 中文分词器 IK 配置和使用
- Elasticsearch 中文分词器 IK 配置和使用
- jsp使用注释格式问题
- 新建JSP报错:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- HashMap多线程并发问题分析
- 域名到ip地址转换
- 部分GDAL工具功能简介
- elasticsearch java api 使用ik 分词器
- 向access 添加数据
- Android 拍照和相册选图 版本兼容
- 算法--两个栈实现队列
- Android apk文件资源混淆原理及实现
- 猫猫学iOS之二维码学习,快速生成二维码
- 为何 as sysdba的方式登陆oracle数据库,随便输入用户名和密码都可以登陆?
- 移除数组中的元素
- Beginner’s Guide nginx初学者手册