分布式検索Elasticsearch——プロジェクトプロセス(一)
10026 ワード
本論文では,Paoding分詞器が組み込まれているが,コード過程ではまだ使用されていないため,paodingに対するステップに遭遇し,直接スキップすることができる内蔵ESプロジェクトの開発について述べる.
技術説明:ElasticSearch 0.20.6+Paoding.
技術環境:Eclipse、Maven
ステップ1:ElasticSearchをダウンロードして手配し、この文章を作成する際に使用するバージョンは0.20.6で、ダウンロードアドレスは:http://www.elasticsearch.org/downloads/0-20-6/,ダウンロード完了後,いずれかのディレクトリに解凍し,前期のJDK環境準備は省略する.
ステップ2:Eclipseの下でMavenプロジェクトを作成します(EclipseインストールMavenプラグインプロセスは言うまでもなく、あなたは直接EclipseのMarketplaceインストールを使用することができます)、テンプレートはmaven-archetype-quickstartを使用すればいいです.作成プロセスは説明しません.詳細は度娘に聞いてください.この仮定で作成したプロジェクトの名前はesampleです.
ステップ3:至https://github.com/medcl/elasticsearch-analysis-paodingESのpaodingプラグインのソースコードをダウンロードし、ダウンロードが完了したらEclipseにインポートします.elasticsearch-analysis-paodingはmavenプロジェクトです.インポート時に注意してください.このインポート後のプロジェクト名はelasticsearch-analysis-paoding-masterと仮定します.
ステップ4:esampleプロジェクトでは、junit、es、es-paoding、jackonをそれぞれ導入し、導入された構成は以下の通りです.
elasticを導入するには
search-analysis-paodingの構成には、第3ステップでインポートしたelasticsearch-analysis-paodingの場所、すなわちEclipseの下にesamineとelasticsearch-analysis-paoding-masterの2つの項目が同時に存在することを指定するrelativePathがあります.
ステップ5:esampleのsrc/main/resources(存在しない場合に確立され、source folderである)の下でconfigをそれぞれ追加する.propertiesとlog 4 j.properties、この場合esamineプロジェクトのコード構造は以下の通りです.
config.propertiesとlog 4 j.propertiesの内容は以下の通りです.
注意、現在
構成のconfig.propertiesファイルで構成されているcluster.nameはES(プロジェクト)が存在するクラスタの名前であり、Elasticsearchをダウンロードして起動すると、そのクラスタの名前はデフォルトでelasticsearchとなり、構成を減らすために直接この名前を使用することを知っています.
手順6:Person、ElasticSearchUtil、LoggerFactory、PropertyManagerの4つのクラスをesmpleに新規作成し、構築後の構造を次の図に示します.
この4つのクラスの内容は次のとおりです.
技術説明:ElasticSearch 0.20.6+Paoding.
技術環境:Eclipse、Maven
ステップ1:ElasticSearchをダウンロードして手配し、この文章を作成する際に使用するバージョンは0.20.6で、ダウンロードアドレスは:http://www.elasticsearch.org/downloads/0-20-6/,ダウンロード完了後,いずれかのディレクトリに解凍し,前期のJDK環境準備は省略する.
ステップ2:Eclipseの下でMavenプロジェクトを作成します(EclipseインストールMavenプラグインプロセスは言うまでもなく、あなたは直接EclipseのMarketplaceインストールを使用することができます)、テンプレートはmaven-archetype-quickstartを使用すればいいです.作成プロセスは説明しません.詳細は度娘に聞いてください.この仮定で作成したプロジェクトの名前はesampleです.
ステップ3:至https://github.com/medcl/elasticsearch-analysis-paodingESのpaodingプラグインのソースコードをダウンロードし、ダウンロードが完了したらEclipseにインポートします.elasticsearch-analysis-paodingはmavenプロジェクトです.インポート時に注意してください.このインポート後のプロジェクト名はelasticsearch-analysis-paoding-masterと仮定します.
ステップ4:esampleプロジェクトでは、junit、es、es-paoding、jackonをそれぞれ導入し、導入された構成は以下の通りです.
junit
junit
4.8.2
test
org.elasticsearch
elasticsearch
0.20.6
org.elasticsearch
elasticsearch-analysis-paoding
1.0.0
../elasticsearch-analysis-paoding-master
com.fasterxml.jackson.core
jackson-databind
2.1.3
elasticを導入するには
search-analysis-paodingの構成には、第3ステップでインポートしたelasticsearch-analysis-paodingの場所、すなわちEclipseの下にesamineとelasticsearch-analysis-paoding-masterの2つの項目が同時に存在することを指定するrelativePathがあります.
ステップ5:esampleのsrc/main/resources(存在しない場合に確立され、source folderである)の下でconfigをそれぞれ追加する.propertiesとlog 4 j.properties、この場合esamineプロジェクトのコード構造は以下の通りです.
config.propertiesとlog 4 j.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となり、構成を減らすために直接この名前を使用することを知っています.
手順6:Person、ElasticSearchUtil、LoggerFactory、PropertyManagerの4つのクラスをesmpleに新規作成し、構築後の構造を次の図に示します.
この4つのクラスの内容は次のとおりです.
******************************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 Logger getInstance(Class clazz) {
Logger log = Logger.getLogger(clazz.getName());
log.setLevel(Level.ERROR);
return log;
}
/**
* , level
*
* @author Geloin
* @param clazz
*
* @param level
* level
* @return
*/
public static Logger getInstance(Class 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 ctxPropertiesMap = null;
static {
try {
String path = PropertyManager.class.getResource("/config")
.getPath();
File dic = new File(path);
ctxPropertiesMap = new HashMap();
for (File file : dic.listFiles()) {
if (file.getName().endsWith(".properties")) {
Properties prop = new Properties();
prop.load(new FileInputStream(file));
Enumeration