ElasticSearch学习笔记

        项目需要空间查询,百度了半天,看到了一个demo使用ElasticSearch实现空间查询。本想着复制过来草草完事,但是发现里面好多代码看都看不懂。干脆一不做二不休,那就学起来。

ElasticSearch 是基于Lucene做了封装和增强

当单纯的对已有数据进行搜索时,Solr速度较快

当实时建立索引时,Solr会产生io阻塞,性能较差,ElasticSearch 具有明显优势

随着数据量的增加,Solr的搜索效率会变低,ElasticSearch 没有明显变化

        刚安装完就遇到了第一个问题,本机访问不了,折腾半天发现最新ElasticSearch 不支持Java1. 8,最后下载了7.6.1版本。

索引(indices) -> 数据库

字段类型(mapping)

文档(documents) -> 字段

倒排索引:将文档拆解成单词形成单词词典,查找数据只需匹配单词可以快速命中文档

ik分词器:

ik_smart:最少切分,不会重复出现单词

Ik_max_word:最细粒度划分,尽可能划分

Ik/config/**.xml可以自定义分词

Rest风格命令

method

url

描述

PUT

localhost:9200/索引名称/类型名称/文档id

创建文档(指定文档id)

POST

localhost:9200/索引名称/类型名称

创建文档(随机文档id)

POST

localhost:9200/索引名称/类型名称/文档id/_update

修改文档

DELETE

localhost:9200/索引名称/类型名称/文档id

删除文档

GET

localhost:9200/索引名称/类型名称/文档id

根据文档id查询文档

POST

localhost:9200/索引名称/类型名称/_search

查询所有数据

复杂搜索:

1.示例

GET user/_doc/_search

{

        //搜索user索引中”name”包含”张”的文档

        “query”: {

                “match”: {

                        “name”: “张”

                }

        },

        //过滤结果

        “_source”: [“name”, “desc”],

        //根据age降序排序

        “sort”: [

                {

                        “age”: {

                                “order”: “desc”

                        }

                }

        ],

        //分页查询(从第0条数据开始,返回10条数据)

        “from”: 0,

        “size”: 10

}

2.布尔查询(多条件查询)

//”must”相当于and,得到”name”含有”jack”并且”age”为10的文档

GET user/_doc/_search

{

        “query”: {

                “bool”: {

                        “must”: [

                                {

                                        “match”: {

                                                “name”: “jack”

                                        }

                                },

                                {

                                        “match”: {

                                                “age”: 10

                                        }

                                }

                        ]

                }

        }

}

//”should”相当于or,得到”name”含有”jack”或者”age”为10的文档

GET user/_doc/_search

{

        “query”: {

                “bool”: {

                        “should”: [

                                {

                                        “match”: {

                                                “name”: “jack”

                                        }

                                },

                                {

                                        “match”: {

                                                “age”: 10

                                        }

                                }

                        ]

                }

        }

}

//”must_not”相当于!=,得到”name”不含有”jack”并且”age”不为10的文档

GET user/_doc/_search

{

        “query”: {

                “bool”: {

                        “must_no”: [

                                {

                                        “match”: {

                                                “name”: “jack”

                                        }

                                },

                                {

                                        “match”: {

                                                “age”: 10

                                        }

                                }

                        ]

                }

        }

}

//过滤查询,得到”name”含有”jack”并且”age”大于10的文档

GET user/_doc/_search

{

        “query”: {

                “bool”: {

                        “must”: [

                                {

                                        “match”: {

                                                “name”: “jack”

                                        }

                                }

                        ],

                        “filter”: {

                                “range”: {

                                        “age”: {

                                                “gt”: 10

                                        }

                                }

                        }

                }

        }

}

match:匹配分词,将查询字段分词后的内容与文档中字段去比较

term:不匹配分词,直接拿查询字段去与文档中的字段去比较

(文档分词与否只根据文档字段的类型)

  1. 高亮查询

//得到”name”含有”jack”的文档,并且”name”中”jack”部分高亮为红色

GET user/_doc/_search

{

        “query”: {

                “match”: {

                        “name”: “jack”

                }

        },

        “highlight”: {

                “pre_tags”: “<p class=’key’ style=’color:red’>”

                “post_tags”: “</p>”

                “fields”: {

                        “name”: {}

                }

        }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值