ES 命令
delete index
curl -X DELETE ‘http://localhost:9200/samples'
list all indexes
curl -X GET ‘http://localhost:9200/_cat/indices?v'
list all docs in index
curl -X GET ‘http://localhost:9200/sample/_search'
query using URL parameters
curl -X GET http://localhost:9200/samples/_search?q=school:Harvard
curl -XGET –header ‘Content-Type: application/json’ http://localhost:9200/samples/_search -d ‘{
“query” : {
“match” : { “school”: “Harvard” }
}
}’
list index mapping
curl -X GET http://localhost:9200/samples
Add Data
curl -XPUT –header ‘Content-Type: application/json’ http://localhost:9200/samples/_doc/1 -d ‘{
“school” : “Harvard”
}’
Update Doc
curl -XPUT –header ‘Content-Type: application/json’ http://localhost:9200/samples/_doc/2 -d ‘
{
“school”: “Clemson”
}’
curl -XPOST –header ‘Content-Type: application/json’ http://localhost:9200/samples/_doc/2/_update -d ‘{
“doc” : {
“students”: 50000}
}’
backup index
curl -XPOST –header ‘Content-Type: application/json’ http://localhost:9200/_reindex -d ‘{
“source”: {
“index”: “samples”
},
“dest”: {
“index”: “samples_backup”
}
}’
ES DSL查询
query DSL ES中索引的数据都会存储一个_score分值,分值越高就代表越匹配
filter DSL 是或者不是,它不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一点。
基本查询demo
1 | { |
geo 距离查询
ES 版本实现
需要将经纬度设置字符串或者数据,对象类型。数据类型设置为geo_point才能查询,底层是Geohash 实现
位置过滤:
- geo_distance 查找距离某个中心点距离在一定范围内的位置
- geo_bounding_box 查找某个长方形区域内的位置
- geo_distance_range 查找距离某个中心的距离在min和max之间的位置
- geo_polygon 查找位于多边形内的地点
1 | { |
php+mysql实现
- 计算范围,可以做搜索用户
1 | function GetRange($lat,$lon,$raidus){ |
- 获取范围内的所有数据
1 | $result = GetRange(110.325945,20.031541,5000); |
PHP计算经纬度坐标之间的距离
1 | function getDistance($lat1, $lng1, $lat2, $lng2, $len_type = 1, $decimal = 2) { |
精确匹配查询(match_phrase)
1 | { |
短语前缀匹配
它与短语匹配的区别为它能匹配的方位更广,它可以命中到短语+其他内容的内容
1 | { |