分布式搜索Elasticsearch——项目过程(一)
来源:互联网 发布:python单例模式优缺点 编辑:程序博客网 时间:2024/06/05 11:32
本文描述的是内嵌ES项目的开发,虽嵌入了Paoding分词器,但代码过程中暂未使用,故遇到针对paoding的步骤,可直接跳过。
技术描述:ElasticSearch0.20.6+Paoding。
技术环境:Eclipse、Maven
步骤一:下载并安排ElasticSearch,编写本文章时使用的是0.20.6版本,下载地址为:http://www.elasticsearch.org/downloads/0-20-6/,下载完成后,将之解压到任一目录,前期的JDK环境准备不予赘述。
步骤二:在Eclipse下建立一个Maven项目(Eclipse安装Maven插件过程不予赘述,你可直接使用Eclipse的Marketplace安装),模板使用maven-archetype-quickstart即可,创建过程不予赘述,详情询问度娘,此入假设建立的项目名为esample。
步骤三:至https://github.com/medcl/elasticsearch-analysis-paoding下载ES的paoding插件源代码,下载完成后,将之导入Eclipse,elasticsearch-analysis-paoding是个maven项目,导入时请注意,此入假设导入后项目名为elasticsearch-analysis-paoding-master。
步骤四:在esample项目中,分别引入junit、es、es-paoding和jackon,引入的配置如下所示:
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.8.2</version><scope>test</scope></dependency><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>0.20.6</version></dependency><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch-analysis-paoding</artifactId><version>1.0.0</version><relativePath>../elasticsearch-analysis-paoding-master</relativePath></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.1.3</version></dependency>
请注意,引入elasticsearch-analysis-paoding的配置中,有一个relativePath,该配置指定了我们在第三步中导入的elasticsearch-analysis-paoding的位置,即Eclipse下同时存在esamine和elasticsearch-analysis-paoding-master两个项目。
步骤五:在esample的src/main/resources(不存在则建立之,是个source folder)下分别添加config.properties和log4j.properties,此时esamine项目的代码结构如下所示:
config.properties和log4j.properties内容如下所示:
***********************config.properties***********************cluster.name = elasticsearchnode.client = true***********************log4j.properties***********************log4j.rootLogger=info, stdout, root, errorlog4j.logger.org.apache.struts2.util.TextProviderHelper=ERRORlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout#log4j.appender.stdout.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r - %m%nlog4j.appender.stdout.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r(%C:%M) - %m%nlog4j.appender.root=org.apache.log4j.RollingFileAppenderlog4j.appender.root.File=${webapp.root}/log/gcr_log.loglog4j.appender.root.MaxFileSize=512KBlog4j.appender.root.MaxBackupIndex=5log4j.appender.root.encoding=UTF-8 log4j.appender.root.layout=org.apache.log4j.PatternLayoutlog4j.appender.root.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r(%C:%M) - %m%nlog4j.appender.error=org.apache.log4j.RollingFileAppenderlog4j.appender.error.File=${webapp.root}/log/gcr_error_log.loglog4j.appender.error.MaxFileSize=512KBlog4j.appender.error.MaxBackupIndex=5log4j.appender.error.encoding=UTF-8 log4j.appender.error.Threshold = ERROR log4j.appender.error.append=truelog4j.appender.error.layout=org.apache.log4j.PatternLayoutlog4j.appender.error.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r(%C:%M) - %m%n
注意,当前配置的config.properties文件中配置的cluster.name为该ES(项目)所在的集群的名字,我们知道,当你下载并启动一个Elasticsearch时,它的集群名字默认为elasticsearch,为了减少配置,我们直接使用这个名字。
步骤六:在esmple中新建四个类,分别为Person、ElasticSearchUtil、LoggerFactory和PropertyManager,建立后结构如下图所示:
这四个类的内容如下所示:
******************************Person.java******************************/** * @author Geloin */package com.geloin.esample.entity;/** * 测试使用的实体 * * @author Geloin * */public class Person {/** * 惟一编码 */private String id;/** * 名称 */private String name;/** * 性别 */private String sex;/** * 年龄 */private Integer age;/** * 是否学生 */private Boolean isStudent;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Boolean getIsStudent() {return isStudent;}public void setIsStudent(Boolean isStudent) {this.isStudent = isStudent;}}******************************ElasticSearchUtil.java******************************/** * @author Geloin */package com.geloin.esample.util;import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequestBuilder;import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;import org.elasticsearch.client.Client;import org.elasticsearch.node.Node;import org.elasticsearch.node.NodeBuilder;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;/** * ES工具类 * * @author Geloin * */public class ElasticSearchUtil {/** * 索引库是否存在 * * @author Geloin * @param client * 客户端 * @param index * 索引库名 * @return 存在则返回true,不存在则返回false */public static Boolean indexExist(Client client, String index) {IndicesExistsRequest request = new IndicesExistsRequestBuilder(client.admin().indices(), index).request();IndicesExistsResponse response = client.admin().indices().exists(request).actionGet();return response.exists();}/** * 生成客户端 * * @author Geloin * @return 客户端 {@link Client} */public static Client createClient() {NodeBuilder builder = NodeBuilder.nodeBuilder();String clusterName = PropertyManager.getContextProperty("cluster.name");builder.clusterName(clusterName);Boolean isClient = Boolean.parseBoolean(PropertyManager.getContextProperty("node.client"));builder.client(isClient);Node node = builder.node();return node.client();}/** * 将Bean转化为JSon * * @author Geloin * @param obj * 要转化的Bean * @return 转化后的结果 */public static String BeanToJson(Object obj) {ObjectMapper mapper = new ObjectMapper();try {return mapper.writeValueAsString(obj);} catch (JsonProcessingException e) {e.printStackTrace();return new String();}}}******************************LoggerFactory.java******************************/** * @author Geloin */package com.geloin.esample.util;import org.apache.log4j.Level;import org.apache.log4j.Logger;/** * 日志工具类 * * @author Geloin * */public class LoggerFactory extends Logger {protected LoggerFactory(String name) {super(name);}/** * 新建实例 * * @author Geloin * @param name * 名称 * @return 建立的实例 */public static Logger getInstance(String name) {Logger log = Logger.getLogger(name);log.setLevel(Level.ERROR);return log;}/** * 新建实例,并指定level * * @author Geloin * @param name * 名称 * @param level * level * @return 建立的实例 */public static Logger getInstance(String name, Level level) {Logger log = Logger.getLogger(name);log.setLevel(level);return log;}/** * 根据类名新建实例 * * @author Geloin * @param clazz * 类名 * @return 实例 */public static <T> Logger getInstance(Class<T> clazz) {Logger log = Logger.getLogger(clazz.getName());log.setLevel(Level.ERROR);return log;}/** * 根据类名新建实例,并指定level * * @author Geloin * @param clazz * 类 * @param level * level * @return 实例 */public static <T> Logger getInstance(Class<T> clazz, Level level) {Logger log = Logger.getLogger(clazz.getName());log.setLevel(level);return log;}}******************************PropertyManager.java******************************/** * @author Geloin */package com.geloin.esample.util;import java.io.File;import java.io.FileInputStream;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import java.util.Properties;/** * 资源文件管理器 * * @author Geloin * */public class PropertyManager {private static Map<String, String> ctxPropertiesMap = null;static {try {String path = PropertyManager.class.getResource("/config").getPath();File dic = new File(path);ctxPropertiesMap = new HashMap<String, String>();for (File file : dic.listFiles()) {if (file.getName().endsWith(".properties")) {Properties prop = new Properties();prop.load(new FileInputStream(file));Enumeration<Object> keys = prop.keys();while (keys.hasMoreElements()) {String key = keys.nextElement().toString();String value = prop.getProperty(key);ctxPropertiesMap.put(key, value);}}}} catch (Exception e) {// do nothing}}/** * 获取配置属性. * * @param name * @return String */public static String getContextProperty(String name) {return (String) ctxPropertiesMap.get(name);}}
- 分布式搜索Elasticsearch——项目过程(一)
- 分布式搜索Elasticsearch——项目过程(一)
- 分布式搜索Elasticsearch——项目过程(一)
- 分布式搜索Elasticsearch——项目过程(二)
- 分布式搜索Elasticsearch——项目过程(二)
- 分布式搜索Elasticsearch——搜索(一)
- 分布式搜索Elasticsearch——搜索(一)
- 分布式搜索Elasticsearch——创建客户端(一)
- 分布式搜索Elasticsearch——创建客户端(一)
- 分布式搜索Elasticsearch——创建客户端(一)
- 分布式搜索Elasticsearch——搜索(二)
- 分布式搜索Elasticsearch——搜索(二)
- 分布式搜索Elasticsearch——创建客户端(二)
- 分布式搜索Elasticsearch——创建客户端(三)
- 分布式搜索Elasticsearch——创建客户端(四)
- 分布式搜索Elasticsearch——创建客户端(五)
- 分布式搜索Elasticsearch——创建客户端(六)
- 分布式搜索Elasticsearch——创建客户端(三)
- 括号匹配的检验
- nginx配合tomcat、resin等java应用服务器提供java支持
- CRM E-mail Router w/ 5000+ users
- android studio 下载安装
- 第三课 SS7信令系统协议简介
- 分布式搜索Elasticsearch——项目过程(一)
- 如何让日期时间控件不显示时间,直接显示字符串"YYYY-MM-DD"
- ip层以上协议的初始化以及套接字相关
- Spring MVC框架搭建及详解
- C#获取当前屏幕大小或任务栏的大小
- Alsa驱动移植
- 回溯法---->背包问题
- opensuse如何取消自动登录
- 全排列以及相关算法