Elasticsearch之建立索引
Elastic Search 是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。
设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
支持通过HTTP使用JSON进行数据索引。
官网:http://www.elasticsearch.org
##设置Mapping
使用ES创建索引时,ES能够自动识别被索引对象的属性类型,但是通常还是需要制定其他分词方式等。
下面介绍使用配置文件设置Mapping:
在ES目录下的config目录下新建mappings目录,新建一个以索引类型为名字的Json格式的文件,放置在/mappings/索引名称/下。
示例:news.json
{% highlight html %}
{
"news":{
"properties": {
"content": {
"type": "string"
},
"webSectionName": {
"type": "string"
},
"title": {
"type": "string"
},
"p_url": {
"type": "string",
"index": "not_analyzed"
},
"tagName": {
"type": "string",
"index_analyzer": "whitespace"
},
"keyWords": {
"type": "string",
"index_analyzer": "whitespace"
},
"isTask": {
"type": "long"
},
"newsDate": {
"type": "long"
},
"crawlDate": {
"type": "long"
},
"webName": {
"type": "string"
},
"crawl_id": {
"type": "long"
},
"url": {
"type": "string",
"index": "not_analyzed"
},
"website_id": {
"type": "string",
"index_analyzer": "whitespace"
}
}
}
}
{% endhighlight %}
##建立索引
{% highlight java %}
public class News {
/**
* 新闻ID
*/
private int crawl_id;
/**
* 新闻URL
*/
private String url;
/**
* 新闻标题
*/
private String title;
/**
* 新闻内容
*/
private String content;
/**
* 新闻时间
*/
private Long newsDate;
/**
* 新闻抓取时间
*/
private Long crawlDate;
/**
* 新闻来源网站名称
*/
private String webName;
/**
* 新闻来源板块名称
*/
private String webSectionName;
/**
* 新闻来源对应的Website_id
*/
private String website_id;
/**
* 新闻来源(信息源)的URL
*/
private String p_url;
/**
* 新闻所属标签名称
*/
private String tagName;
/**
* 新闻关键词
*/
private String keyWords;
//getter setter
public String toJsonString(){
ObjectMapper mapper = new ObjectMapper();
try {
String json = mapper.writeValueAsString(this);
return json;
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
}
{% endhighlight %}
{% highlight java %}
/**
* 将News对象建立索引
* @param news News对象
* @param indexName Index名称
* @return
*/
public boolean index(News news,String indexName){
/**
* 使用文档ID作为索引中的ID
*/
IndexRequestBuilder indexRequestBuilder =IndexESClientFactory.getClient().prepareIndex(indexName, "news", String.valueOf(news.getCrawl_id()));
indexRequestBuilder.setSource(news.toJsonString());
logger.info("开始建立索引,crawl_id:"+news.getCrawl_id());
try {
indexRequestBuilder.execute().actionGet();
} catch (ElasticsearchException e) {
logger.error(e.getDetailedMessage());
return false;
}
return true;
}
{% endhighlight %}