ElasticSearch的Schema free特性给动态提取并索引网页结构化文本内容提供了支持,使用URL的hash值来作为索引的主键(实际开发中使用URL作为主键,这里使用URL的hash值是为了方便演示),当网页内容改变后,可以非常方便地更新索引。
下面演示了动态索引结构和索引更新机制:
1、提交索引:
curl -XPUT http://localhost:9200/webpage/finance/85723925 -d '
{
"url" : "http://money.163.com/14/0523/02/9ST8D7KR00253B0H.html",
"title" : "中国非一线城市限购可退出 楼市限购或全面松绑",
"content" : "昨日有消息称,除北上广深之外,其他城市的限购政策可以自行调节,尤其是库存过大的地方。这意味着除四大一线城市之外的30多个限购城市,有可能全面松绑限购政策。"
}
'
2、服务器响应:
{"_index":"webpage","_type":"finance","_id":"85723925","_version":1,"created":true}
3、查看索引结构:
需要elasticsearch-head插件,下面是安装方法:
plugin -install mobz/elasticsearch-head
浏览器访问:
4、再次提交同样URL的索引,内容改变了:
curl -XPUT http://localhost:9200/webpage/finance/85723925 -d '
{
"url" : "http://money.163.com/14/0523/02/9ST8D7KR00253B0H.html",
"title" : "标题改了:中国非一线城市限购可退出 楼市限购或全面松绑",
"content" : "内容改了:昨日有消息称,除北上广深之外,其他城市的限购政策可以自行调节,尤其是库存过大的地方。这意味着除四大一线城市之外的30多个限购城市,有可能全面松绑限购政策。"
}
'
5、服务器响应:
{"_index":"webpage","_type":"finance","_id":"85723925","_version":2,"created":false}
可以看到,版本变为2,created为false,已经成功更新索引
6、再次提交同样URL的索引,不但内容改变了,而且新增了2个字段:
curl -XPUT http://localhost:9200/webpage/finance/85723925 -d '
{
"url" : "http://money.163.com/14/0523/02/9ST8D7KR00253B0H.html",
"title" : "标题改了:中国非一线城市限购可退出 楼市限购或全面松绑",
"content" : "内容改了:昨日有消息称,除北上广深之外,其他城市的限购政策可以自行调节,尤其是库存过大的地方。这意味着除四大一线城市之外的30多个限购城市,有可能全面松绑限购政策。",
"keywords" : "试探,限购政策,淡出,一次次",
"description" : "中国非一线城市限购可退出 楼市限购或全面松绑,试探 限购政策 淡出 一次次"
}
'
7、服务器响应:
{"_index":"webpage","_type":"finance","_id":"85723925","_version":3,"created":false}
8、再次查看索引结构:
可以看到,新增的两个索引字段已经添加到索引里面了