先做个记录,研究出来了,不记下来下次就不知道怎么处理了。
为es安装paoding插件
首先你得安装paoding插件,进入%ES_HOME%/bin,执行下列代码:
- plugin -install medcl/elasticsearch-analysis-paoding/1.0.0
接下来,在https://github.com/medcl/elasticsearch-analysis-paoding下载paoding解析插件,解压后,把elasticsearch-analysis-paoding-master\config\下的paoding文件夹放置到%ES_HOME%/config下。
在java代码中使用es和paoding插件
1. 在项目中导入es及es-paoding的包;
2. 将paoding文件夹复制到根目录下的config下;
3. 在src目录下建立一个elasticsearch.yml文件,使其内容如下所示:
- index:
- analysis:
- analyzer:
- paoding:
- alias: [paoding_analyzer]
- type: org.elasticsearch.index.analysis.PaodingAnalyzerProvider
4. java代码,当你只需要为一个字段建立索引,并通过这个字段查询时代码如下所示:
- import java.util.Iterator;
- import java.util.Map;
- import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
- import org.elasticsearch.action.index.IndexResponse;
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.action.search.SearchType;
- import org.elasticsearch.client.Client;
- import org.elasticsearch.client.Requests;
- import org.elasticsearch.common.unit.TimeValue;
- import org.elasticsearch.common.xcontent.XContentBuilder;
- import org.elasticsearch.common.xcontent.XContentFactory;
- import org.elasticsearch.index.query.QueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.indices.IndexAlreadyExistsException;
- import org.elasticsearch.node.Node;
- import org.elasticsearch.node.NodeBuilder;
- import org.elasticsearch.search.SearchHit;
- import org.junit.BeforeClass;
- import org.junit.Test;
- /**
- * <p>
- * MyTest.java
- * </p>
- * <p>
- * </p>
- *
- * @author $Author: Geloin $
- * @version $Revision: V5.1 $
- */
- public class MyTest {
- private static Node node;
- @BeforeClass
- public static void beforeClass() {
- node = NodeBuilder.nodeBuilder().node();
- }
- /**
- *
- * <p>
- * 创建索引
- * </p>
- * @author Geloin
- * Created [2012-12-29 下午5:38:22]
- * @throws Exception
- */
- @Test
- public void createIndex() throws Exception {
- Client client = node.client();
- try {
- try {
- // 预定义一个索引
- client.admin().indices().prepareCreate("app").execute().actionGet();
- // 定义索引字段属性
- XContentBuilder mapping = XContentFactory.jsonBuilder().startObject();
- mapping = mapping.startObject("title")
- // 创建索引时使用paoding解析
- .field("indexAnalyzer", "paoding")
- // 搜索时使用paoding解析
- .field("searchAnalyzer", "paoding")
- .field("store", "yes")
- .endObject();
- mapping = mapping.endObject();
- PutMappingRequest mappingRequest = Requests.putMappingRequest("app").type("article").source(mapping);
- client.admin().indices().putMapping(mappingRequest).actionGet();
- }
- catch (IndexAlreadyExistsException e) {
- System.out.println("索引库已存在");
- }
- // 生成文档
- XContentBuilder doc = XContentFactory.jsonBuilder().startObject();
- doc = doc.field("title", "java附魔大师");
- doc = doc.endObject();
- // 创建索引
- IndexResponse response = client.prepareIndex("app", "article", "1").setSource(doc).execute().actionGet();
- System.out.println(response.getId() + "====" + response.getIndex() + "====" + response.getType());
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- finally {
- client.close();
- }
- }
- /**
- *
- * <p>
- * 查询
- * </p>
- * @author Geloin
- * Created [2012-12-29 下午5:40:55]
- * @throws Exception
- */
- @Test
- public void search() throws Exception {
- Client client = node.client();
- try {
- QueryBuilder qb = QueryBuilders.termQuery("title", "大师");
- SearchResponse scrollResp = client.prepareSearch("app").setSearchType(SearchType.SCAN).setScroll(
- new TimeValue(60000)).setQuery(qb).setSize(100).execute().actionGet();
- while (true) {
- scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(600000)).execute().actionGet();
- for (SearchHit hit : scrollResp.getHits()) {
- Map<String, Object> source = hit.getSource();
- if (!source.isEmpty()) {
- for (Iterator<Map.Entry<String, Object>> it = source.entrySet().iterator(); it.hasNext();) {
- Map.Entry<String, Object> entry = it.next();
- System.out.println(entry.getKey() + "=======" + entry.getValue());
- }
- }
- }
- if (scrollResp.hits().hits().length == 0) {
- break;
- }
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- finally {
- client.close();
- }
- }
- }
将paoding加入es中的代码主要在定义索引字段属性时,代码如下所示:
- // 定义索引字段属性
- XContentBuilder mapping = XContentFactory.jsonBuilder().startObject();
- mapping = mapping.startObject("title")
- // 创建索引时使用paoding解析
- .field("indexAnalyzer", "paoding")
- // 搜索时使用paoding解析
- .field("searchAnalyzer", "paoding")
- .field("store", "yes")
- .endObject();
- mapping = mapping.endObject();
5. 当你想为多个字段(例如一个实体的多个属性)建立索引并使用字段搜索时,代码如下所示:
- import java.util.Date;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.UUID;
- import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest;
- import org.elasticsearch.action.index.IndexResponse;
- import org.elasticsearch.action.search.SearchResponse;
- import org.elasticsearch.action.search.SearchType;
- import org.elasticsearch.client.Client;
- import org.elasticsearch.client.Requests;
- import org.elasticsearch.common.unit.TimeValue;
- import org.elasticsearch.common.xcontent.XContentBuilder;
- import org.elasticsearch.common.xcontent.XContentFactory;
- import org.elasticsearch.index.query.QueryBuilder;
- import org.elasticsearch.index.query.QueryBuilders;
- import org.elasticsearch.indices.IndexAlreadyExistsException;
- import org.elasticsearch.node.Node;
- import org.elasticsearch.node.NodeBuilder;
- import org.elasticsearch.search.SearchHit;
- import org.junit.BeforeClass;
- import org.junit.Test;
- /**
- * <p>
- * MyTest.java
- * </p>
- * <p>
- * </p>
- *
- * @author $Author: Geloin $
- * @version $Revision: V5.1 $
- */
- public class MyTest {
- private static Node node;
- @BeforeClass
- public static void beforeClass() {
- node = NodeBuilder.nodeBuilder().node();
- }
- /**
- *
- * <p>
- * 创建索引
- * </p>
- * @author Geloin
- * Created [2012-12-29 下午5:38:22]
- * @throws Exception
- */
- @Test
- public void createIndex() throws Exception {
- Client client = node.client();
- try {
- try {
- // 预定义一个索引
- client.admin().indices().prepareCreate("app").execute().actionGet();
- // 定义索引字段属性
- XContentBuilder mapping = XContentFactory.jsonBuilder().startObject();
- mapping = mapping.startObject("article");
- mapping = mapping.startObject("id")
- // 创建索引时使用paoding解析
- .field("indexAnalyzer", "paoding")
- // 搜索时使用paoding解析
- .field("searchAnalyzer", "paoding")
- .field("store", "yes")
- .endObject();
- mapping = mapping.startObject("title")
- // 创建索引时使用paoding解析
- .field("indexAnalyzer", "paoding")
- // 搜索时使用paoding解析
- .field("searchAnalyzer", "paoding")
- .field("store", "yes")
- .endObject();
- mapping = mapping.startObject("createTime")
- // 创建索引时使用paoding解析
- .field("indexAnalyzer", "paoding")
- // 搜索时使用paoding解析
- .field("searchAnalyzer", "paoding")
- .field("store", "yes")
- .endObject();
- mapping = mapping.endObject();
- mapping = mapping.endObject();
- // type的值必须与第一个startObject("...")内的值相同,且必须有一个根目录,如article为根目录,id、title和createTime为子目录
- PutMappingRequest mappingRequest = Requests.putMappingRequest("app").type("article").source(mapping);
- client.admin().indices().putMapping(mappingRequest).actionGet();
- }
- catch (IndexAlreadyExistsException e) {
- System.out.println("索引库已存在");
- }
- String id = UUID.randomUUID().toString();
- // 生成文档
- XContentBuilder doc = XContentFactory.jsonBuilder().startObject();
- doc = doc.startObject("article");
- doc = doc.field("id", id);
- doc = doc.field("title", "java附魔大师");
- doc = doc.field("createTime", new Date());
- doc = doc.endObject();
- doc = doc.endObject();
- // 创建索引
- IndexResponse response = client.prepareIndex("app", "article", id).setSource(doc).execute().actionGet();
- System.out.println(response.getId() + "====" + response.getIndex() + "====" + response.getType());
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- finally {
- client.close();
- }
- }
- /**
- *
- * <p>
- * 查询
- * </p>
- * @author Geloin
- * Created [2012-12-29 下午5:40:55]
- */
- @Test
- public void search() throws Exception {
- Client client = node.client();
- try {
- // QueryBuilder qb = QueryBuilders.fieldQuery("title", "大师");
- QueryBuilder qb = QueryBuilders.fieldQuery("article.title", "大师");
- SearchResponse scrollResp = client.prepareSearch("app").setSearchType(SearchType.SCAN).setScroll(
- new TimeValue(60000)).setQuery(qb).setSize(100).execute().actionGet();
- while (true) {
- scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(600000)).execute().actionGet();
- for (SearchHit hit : scrollResp.getHits()) {
- Map<String, Object> source = hit.getSource();
- if (!source.isEmpty()) {
- for (Iterator<Map.Entry<String, Object>> it = source.entrySet().iterator(); it.hasNext();) {
- Map.Entry<String, Object> entry = it.next();
- System.out.println(entry.getKey() + "=======" + entry.getValue());
- }
- }
- }
- if (scrollResp.hits().hits().length == 0) {
- break;
- }
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- finally {
- client.close();
- }
- }
- }
相关推荐
分布式搜索elasticsearch中文分词集成 5 分布式搜索elasticsearch配置文件详解 8 分布式搜索elasticsearch安装步骤详解 12 分布式搜索elasticsearch高级配置之(一)--- 分片分布规则设置 13 分布式搜索elastic...
分布式搜索 elasticsearch 方案研究 - Java API分布式搜索 elasticsearch 方案研究 - Java API
SIMATIC ET 200S 分布式 I/O IM151-1 BASIC 接口模块 (6ES7151-1CA00-0AB0)[手册]pdf,
分布式搜索引擎-学习笔记-3
es的集成和简单应用demo
elasticsearch-analysis-ik 是一个常用的中文分词器,在 Elasticsearch 中广泛应用于中文文本的分析和搜索。下面是 elasticsearch-analysis-ik 分词器的几个主要特点: 中文分词:elasticsearch-analysis-ik 是基于...
分布式搜索引擎ElasticSearch思维导图,ES思维带图。分布式搜索引擎ElasticSearch思维导图,ES思维带图。分布式搜索引擎ElasticSearch思维导图,ES思维带图。分布式搜索引擎ElasticSearch思维导图,ES思维带图。...
最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip最新版 elasticsearch-analysis-ik-8.7.0.zip
Elasticsearch(elasticsearch-8.2.0-aarch64.rpm),适用于Linux arm x86_64:它是一个高度可扩展的开源全文本搜索和分析引擎。它使您可以快速,近乎实时地存储,搜索和分析大量数据。它通常用作支持具有复杂搜索...
Elasticsearch(elasticsearch-8.2.0-windows-x86_64.zip),适用于Windows x86_64:它是一个高度可扩展的开源全文本搜索和分析引擎。它使您可以快速,近乎实时地存储,搜索和分析大量数据。它通常用作支持具有复杂...
iOS实例开发源码——garethstokes-evil-bees-765dfce.zip
Elasticsearch(elasticsearch-8.2.0-linux-x86_64.tar.gz),适用于Linux x86_64 :它是一个高度可扩展的开源全文本搜索和分析引擎。它使您可以快速,近乎实时地存储,搜索和分析大量数据。它通常用作支持具有复杂...
iOS游戏应用源代码——garethstokes-evil-bees-765dfce.zip
iOS实例开发源码——jstart-facebreak-cocos2d-opengles20-1b41815.zip
elasticsearch-analysis-ik-7.14.0-c.zip elasticsearch-analysis-ik-7.14.0-c.zip elasticsearch-analysis-ik-7.14.0-c.zip
elastic-job-lite是一款当当网开源的分布式任务调度demo,idea导入亲测可用
elasticsearch-analysis-ik-7.17.0
iOS游戏应用源代码——jstart-facebreak-cocos2d-opengles20.zip
SIMATIC ET 200S 分布式 I/O IM151-1 FO STANDARD 接口模块 (6ES7151-1AB05-0AB0)[手册]pdf,