1. ES的restful API
- 请求方式 : get / post / delete / put / head
- 查询字符串参数 : 一般指用来操作输出结果的参数. (例如”pretty”表示将结果格式化输出为JSON格式,便于阅读).
curl -X<请求方式> ‘<协议>://<IP号>:<端口号>/<路径>?<查询字符串参数>’ -d ‘<查询的JSON请求体>’
比如:查看es中的文档总数:
##这里的json请求体,不能合并成一个字符串,必须要有换行。
curl -XGET 'http://localhost:9200/_count?pretty' -H 'content-Type:application/json' -d '
{
"query":{
"match_all":{}
}
}'
如果上述命令改为,则会报错:
curl -XGET 'http://localhost:9200/_count?pretty' -H 'content-Type:application/json' -d '{"query":{"match_all":{}}',
2. Elasticsearch和MYSQL对应
类似navicat操作mysql的工具,操作es的客户端,elasticsearch-head
,点击下载
#启动命令
cd elasticsearch-head
npm install
npm run start
3. Elasticsearch其他概念
- 全文检索:对于非结构化数据,例如,文章、网页、邮件这类不规则的文本数据被叫做全文数据,对它们的检索被称为全文检索。
- 机构化数据可以通过给数据库加索引(B树),这样就可以通过二分查找等算法来加速;全文检索通过倒排索引的方式来加快索引速度,也就是建立文本内关键字与文本之间的映射关系,然后再通过对这些关键进行常规索引的方式来加速。倒排索引是在将全文添加到全文数据库里时创建的,所以添加的过程会慢一些。
相关的参数:es为了提升性能,文档入库的时候并没有直接创建索引,es每隔1s集中处理一次新加入的文档,可以通过index.refresh_interval
4. Elasticsearch相关度
-
boolean model:取出所有查询命中的document
-
TF/IDF:对搜索条件进行分词后,会产生多个term,分别计算每个term对每一个document的分数(后面详细解释)。
-
vector space model:每个document是一个向量,叫做Document Vector;查询条件也做为一个向量,叫做Query Vector;几个term值向量就是几维。最后按照QV和DV之间的夹角大小(夹角余弦值)从小到大排序,夹角越小相关度越高。
# 每个term在document所占的权重。 Document Vector = {weight1, weight2, …… ,weightN} #每个term在查询条件中所占的权重 Query Vector = {weight1, weight2, …… , weightN}
-
TF/IDF公式