最大的特点:
1. 数据库的 database, 就是 index
2. 数据库的 table, 就是 tag
3. 不要使用browser, 使用curl来进行客户端操作. 否则会出现 java heap ooxx...
curl: -X 后面跟 RESTful : GET, POST ...
-d 后面跟数据。 (d = data to send)
1. create:
指定 ID 来建立新记录。 (貌似PUT, POST都可以)
$ curl -XPOST localhost:9200/films/md/2 -d '
{ "name":"hei yi ren", "tag": "good"}'
使用自动生成的 ID 建立新纪录:
$ curl -XPOST localhost:9200/films/md -d '
{ "name":"ma da jia si jia3", "tag": "good"}'
2. 查询:
2.1 查询所有的 index, type:
$ curl localhost:9200/_search?pretty=true
2.2 查询某个index下所有的type:
$ curl localhost:9200/films/_search
2.3 查询某个index 下, 某个 type下所有的记录:
$ curl localhost:9200/films/md/_search?pretty=true
2.4 带有参数的查询:
$ curl localhost:9200/films/md/_search?q=tag:good
{"took":7,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":2,"max_score":1.0,"hits":[{"_index":"film","_type":"md","_id":"2","_score":1.0, "_source" :
{ "name":"hei yi ren", "tag": "good"}},{"_index":"film","_type":"md","_id":"1","_score":0.30685282, "_source" :
{ "name":"ma da jia si jia", "tag": "good"}}]}}
2.5 使用JSON参数的查询: (注意 query 和 term 关键字)
$ curl localhost:9200/film/_search -d '
{"query" : { "term": { "tag":"bad"}}}'
3. update
$ curl -XPUT localhost:9200/films/md/1 -d { ...(data)... }
4. 删除。 删除所有的:
1. 数据库的 database, 就是 index
2. 数据库的 table, 就是 tag
3. 不要使用browser, 使用curl来进行客户端操作. 否则会出现 java heap ooxx...
curl: -X 后面跟 RESTful : GET, POST ...
-d 后面跟数据。 (d = data to send)
1. create:
指定 ID 来建立新记录。 (貌似PUT, POST都可以)
$ curl -XPOST localhost:9200/films/md/2 -d '
{ "name":"hei yi ren", "tag": "good"}'
使用自动生成的 ID 建立新纪录:
$ curl -XPOST localhost:9200/films/md -d '
{ "name":"ma da jia si jia3", "tag": "good"}'
2. 查询:
2.1 查询所有的 index, type:
$ curl localhost:9200/_search?pretty=true
2.2 查询某个index下所有的type:
$ curl localhost:9200/films/_search
2.3 查询某个index 下, 某个 type下所有的记录:
$ curl localhost:9200/films/md/_search?pretty=true
2.4 带有参数的查询:
$ curl localhost:9200/films/md/_search?q=tag:good
{"took":7,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":2,"max_score":1.0,"hits":[{"_index":"film","_type":"md","_id":"2","_score":1.0, "_source" :
{ "name":"hei yi ren", "tag": "good"}},{"_index":"film","_type":"md","_id":"1","_score":0.30685282, "_source" :
{ "name":"ma da jia si jia", "tag": "good"}}]}}
2.5 使用JSON参数的查询: (注意 query 和 term 关键字)
$ curl localhost:9200/film/_search -d '
{"query" : { "term": { "tag":"bad"}}}'
3. update
$ curl -XPUT localhost:9200/films/md/1 -d { ...(data)... }
4. 删除。 删除所有的:
$ curl -XDELETE localhost:9200/films
---------------------------------------------------------------------------------------------------------
角色关系对照
elasticsearch 跟 MySQL 中定义资料格式的角色关系对照表如下
MySQL elasticsearch
database index
table type
table schema mapping
row document
field field
3.索引映射
#创建索引
$ curl -XPUT http: //localhost: 9200 /test-index
#创建Mapping
$ curl -XPUT http: //localhost: 9200 /test-index /test-type /_mapping -d '{
"properties" : {
"name" : { "type" : "string" }
}
}'
$ curl -XPUT http: //localhost: 9200 /test-index
#创建Mapping
$ curl -XPUT http: //localhost: 9200 /test-index /test-type /_mapping -d '{
"properties" : {
"name" : { "type" : "string" }
}
}'
@route
(
'/indexsetting/'
)
def indexmapping ( ):
"""索引映射"""
conn = ES ( '127.0.0.1:9200' )
conn. debug_dump = True
try:
#删除索引
conn. delete_index ( "test-index" )
except:
pass
#创建索引
conn. create_index ( "test-index" )
mapping = {
u 'id': { 'store': 'yes' ,
'type': u 'integer' } ,
u 'author': { 'boost': 1.0 ,
'index': 'not_analyzed' ,
'store': 'yes' ,
'type': u 'string' } ,
u 'published': { 'boost': 1.0 ,
'index': 'not_analyzed' ,
'store': 'yes' ,
'type': u 'datetime' } ,
u 'url': { 'store': 'yes' ,
'type': u 'string' } ,
u 'title': { 'boost': 1.0 ,
'index': 'analyzed' ,
'store': 'yes' ,
'type': u 'string' } ,
u 'content': { 'boost': 1.0 ,
'index': 'analyzed' ,
'store': 'yes' ,
'type': u 'string' ,
"term_vector" : "with_positions_offsets" }
}
#索引映射
conn. put_mapping ( "test-type" , { 'properties':mapping } , [ "test-index" ] )
return "索引映射"
def indexmapping ( ):
"""索引映射"""
conn = ES ( '127.0.0.1:9200' )
conn. debug_dump = True
try:
#删除索引
conn. delete_index ( "test-index" )
except:
pass
#创建索引
conn. create_index ( "test-index" )
mapping = {
u 'id': { 'store': 'yes' ,
'type': u 'integer' } ,
u 'author': { 'boost': 1.0 ,
'index': 'not_analyzed' ,
'store': 'yes' ,
'type': u 'string' } ,
u 'published': { 'boost': 1.0 ,
'index': 'not_analyzed' ,
'store': 'yes' ,
'type': u 'datetime' } ,
u 'url': { 'store': 'yes' ,
'type': u 'string' } ,
u 'title': { 'boost': 1.0 ,
'index': 'analyzed' ,
'store': 'yes' ,
'type': u 'string' } ,
u 'content': { 'boost': 1.0 ,
'index': 'analyzed' ,
'store': 'yes' ,
'type': u 'string' ,
"term_vector" : "with_positions_offsets" }
}
#索引映射
conn. put_mapping ( "test-type" , { 'properties':mapping } , [ "test-index" ] )
return "索引映射"
4.索引
#索引
$ curl -XPUT http: //localhost: 9200 /test-index /test-type / 1 -d '{
"user": "kimchy",
"post_date": "2009-11-15T13:12:00",
"message": "Trying out elasticsearch, so far so good?"
}'
#获取
$ curl -XGET http: //localhost: 9200 /test-index /test-type / 1
#删除
$ curl -XDELETE 'http://localhost:9200/test-index/test-type/1'
$ curl -XPUT http: //localhost: 9200 /test-index /test-type / 1 -d '{
"user": "kimchy",
"post_date": "2009-11-15T13:12:00",
"message": "Trying out elasticsearch, so far so good?"
}'
#获取
$ curl -XGET http: //localhost: 9200 /test-index /test-type / 1
#删除
$ curl -XDELETE 'http://localhost:9200/test-index/test-type/1'
@route
(
'/indextest/'
)
def indexTest ( ):
"""索引测试"""
conn = ES ( '127.0.0.1:9200' )
for item in Data ( ). getData ( ):
#添加索引
conn. index (item , "test-index" , "test-type" ,item [ 'id' ] )
#索引优化
conn. optimize ( [ "test-index" ] )
#删除索引内容
conn. delete ( "test-index" , "test-type" , 2668090 )
#更新索引内容
model = conn. get ( "test-index" , "test-type" , 2667371 )
model [ "title" ] = "标题修改测试"
conn. update (model , "test-index" , "test-type" , 2667371 )
#刷新索引
conn. refresh ( [ "test-index" ] )
q = MatchAllQuery ( )
results = conn. search (query = q ,indices = "test-index" ,doc_types = "test-type" )
# for r in results:
# print r
return template ( 'default.tpl' , list =results ,count = len (results ) )
def indexTest ( ):
"""索引测试"""
conn = ES ( '127.0.0.1:9200' )
for item in Data ( ). getData ( ):
#添加索引
conn. index (item , "test-index" , "test-type" ,item [ 'id' ] )
#索引优化
conn. optimize ( [ "test-index" ] )
#删除索引内容
conn. delete ( "test-index" , "test-type" , 2668090 )
#更新索引内容
model = conn. get ( "test-index" , "test-type" , 2667371 )
model [ "title" ] = "标题修改测试"
conn. update (model , "test-index" , "test-type" , 2667371 )
#刷新索引
conn. refresh ( [ "test-index" ] )
q = MatchAllQuery ( )
results = conn. search (query = q ,indices = "test-index" ,doc_types = "test-type" )
# for r in results:
# print r
return template ( 'default.tpl' , list =results ,count = len (results ) )
5.搜索
#lucene语法方式的查询
$ curl -XGET http: //localhost: 9200 /test-index /test-type /_search? q=user:kimchy
#query DSL方式查询
$ curl -XGET http: //localhost: 9200 /test-index /test-type /_search -d '{
"query" : {
"term" : { "user": "kimchy" }
}
}'
#query DSL方式查询
$ curl -XGET http: //localhost: 9200 /test-index /_search? pretty= true -d '{
"query" : {
"range" : {
"post_date" : {
"from" : "2009-11-15T13:00:00",
"to" : "2009-11-15T14:30:00"
}
}
}
}'
#查找全部索引内容
$ curl -XGET http: //localhost: 9200 /test-index /test-type /_search? pretty= true
$ curl -XGET http: //localhost: 9200 /test-index /test-type /_search? q=user:kimchy
#query DSL方式查询
$ curl -XGET http: //localhost: 9200 /test-index /test-type /_search -d '{
"query" : {
"term" : { "user": "kimchy" }
}
}'
#query DSL方式查询
$ curl -XGET http: //localhost: 9200 /test-index /_search? pretty= true -d '{
"query" : {
"range" : {
"post_date" : {
"from" : "2009-11-15T13:00:00",
"to" : "2009-11-15T14:30:00"
}
}
}
}'
#查找全部索引内容
$ curl -XGET http: //localhost: 9200 /test-index /test-type /_search? pretty= true
@route
(
'/search/'
)
@route ( '/search/<searchkey>' )
def search (searchkey =u "关键算法" ):
"""索引搜索"""
conn = ES ( '127.0.0.1:9200' )
#TextQuery会对searchkey进行分词
qtitle = TextQuery ( "title" , searchkey )
qcontent = TextQuery ( "content" , searchkey )
#发布时间大于"2012-9-2 22:00:00"
qpublished =RangeQuery (ESRangeOp ( "published" , "gt" , datetime ( 2012 , 9 , 2 , 22 , 0 , 0 ) ) )
h = HighLighter ( [ '<b>' ] , [ '</b>' ] , fragment_size = 500 )
#多字段搜索(must=>and,should=>or),高亮,结果截取(分页),排序
q = Search (BoolQuery (must = [qpublished ] ,should = [qtitle ,qcontent ] ) ,highlight =h , start = 0 , size = 3 , sort = { 'id': { 'order': 'asc' } } )
q. add_highlight ( "title" )
q. add_highlight ( "content" )
results = conn. search (query = q ,indices = "test-index" ,doc_types = "test-type" )
list = [ ]
for r in results:
if (r._meta. highlight. has_key ( "title" ) ):
r [ 'title' ] =r._meta. highlight [u "title" ] [ 0 ]
if (r._meta. highlight. has_key ( "content" ) ):
r [ 'content' ] =r._meta. highlight [u "content" ] [ 0 ]
list. append (r )
return template ( 'search.tpl' , list = list ,count =results. total )
@route ( '/search/<searchkey>' )
def search (searchkey =u "关键算法" ):
"""索引搜索"""
conn = ES ( '127.0.0.1:9200' )
#TextQuery会对searchkey进行分词
qtitle = TextQuery ( "title" , searchkey )
qcontent = TextQuery ( "content" , searchkey )
#发布时间大于"2012-9-2 22:00:00"
qpublished =RangeQuery (ESRangeOp ( "published" , "gt" , datetime ( 2012 , 9 , 2 , 22 , 0 , 0 ) ) )
h = HighLighter ( [ '<b>' ] , [ '</b>' ] , fragment_size = 500 )
#多字段搜索(must=>and,should=>or),高亮,结果截取(分页),排序
q = Search (BoolQuery (must = [qpublished ] ,should = [qtitle ,qcontent ] ) ,highlight =h , start = 0 , size = 3 , sort = { 'id': { 'order': 'asc' } } )
q. add_highlight ( "title" )
q. add_highlight ( "content" )
results = conn. search (query = q ,indices = "test-index" ,doc_types = "test-type" )
list = [ ]
for r in results:
if (r._meta. highlight. has_key ( "title" ) ):
r [ 'title' ] =r._meta. highlight [u "title" ] [ 0 ]
if (r._meta. highlight. has_key ( "content" ) ):
r [ 'content' ] =r._meta. highlight [u "content" ] [ 0 ]
list. append (r )
return template ( 'search.tpl' , list = list ,count =results. total )
6.设置
#创建索引,并设置分片和副本参数
$ curl -XPUT http: //localhost: 9200 /elasticsearch / -d '{
"settings" : {
"number_of_shards" : 2,
"number_of_replicas" : 3
}
}'
$ curl -XPUT http: //localhost: 9200 /elasticsearch / -d '{
"settings" : {
"number_of_shards" : 2,
"number_of_replicas" : 3
}
}'
7.其他
#分词
curl -XGET 'http://localhost:9200/test-index/_analyze?text=中华人民共和国'
curl -XGET 'http://localhost:9200/test-index/_analyze?text=中华人民共和国'