本文描述的是内嵌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>
请注意,引入elastic search-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 = elasticsearch
- node.client = true
- ***********************log4j.properties***********************
- log4j.rootLogger=info, stdout, root, error
- log4j.logger.org.apache.struts2.util.TextProviderHelper=ERROR
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- #log4j.appender.stdout.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r - %m%n
- log4j.appender.stdout.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r(%C:%M) - %m%n
- log4j.appender.root=org.apache.log4j.RollingFileAppender
- log4j.appender.root.File=${webapp.root}/log/gcr_log.log
- log4j.appender.root.MaxFileSize=512KB
- log4j.appender.root.MaxBackupIndex=5
- log4j.appender.root.encoding=UTF-8
- log4j.appender.root.layout=org.apache.log4j.PatternLayout
- log4j.appender.root.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r(%C:%M) - %m%n
- log4j.appender.error=org.apache.log4j.RollingFileAppender
- log4j.appender.error.File=${webapp.root}/log/gcr_error_log.log
- log4j.appender.error.MaxFileSize=512KB
- log4j.appender.error.MaxBackupIndex=5
- log4j.appender.error.encoding=UTF-8
- log4j.appender.error.Threshold = ERROR
- log4j.appender.error.append=true
- log4j.appender.error.layout=org.apache.log4j.PatternLayout
- log4j.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);
- }
- }
http://blog.csdn.net/geloin/article/details/8934289