分布式搜索Elasticsearch——项目过程(一)

xiaoxiao2021-02-27  206

      本文描述的是内嵌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,引入的配置如下所示:

[java]   view plain  copy <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内容如下所示:

[java]   view plain  copy ***********************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,建立后结构如下图所示:

        这四个类的内容如下所示:

[java]   view plain  copy ******************************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

转载请注明原文地址: https://www.6miu.com/read-12285.html

最新回复(0)