文档相似性
文本相似度计算-JaccardSimilarity和哈希签名函数
https://blog.csdn.net/ygrx/article/details/12748857
lucene学习
来源:孔浩Lucene视频教程
Lucene学习思维导图
分词流程图
分词器的类型
分词过滤器类型
分词结果输出
面向文档的数据库:(Elasticsearch的另一种用法)
Elasticsearch是一个基于lucene的分布式搜索引擎,但是我们也可以将其作为数据库使用。可参考:查询优化及查询方案设计
Elasticsearch 使用的详细教程:
Elasticsearch 权威指南(中文版)
或官网:
英文文档
Elasticsearch 权威指南(中文版)
Elasticsearch的安装
更详细可参考
安装前首先去ES的官网下载软件包,下载地址为:https://www.elastic.co/downloads/elasticsearch。官网提供ZIP、TAR 、MSI等多种格式的软件包,在Windows下可以下载ZIP压缩包或者MSI服务安装包。
对于window系统,可下载ZIP压缩文件包,例如下载的文件名为“elasticsearch-6.3.0.zip”,可将其解压到C盘根目录(也可以是其他盘)。由目录名可以清楚的了解每个目录具体是做什么的,比如:config目录存放配置文件、logs目录存放日志文件、lib目录存放依赖包、bin目录存放系统启动脚本等。进入bin目录,双击“elasticsearch.bat”即可启动Elasticsearch服务。出现“started”标志就说明服务启动成功。
在 Windows 上面运行 Elasticsearch,你可以从 http://curl.haxx.se/download.html 中下载 cURL。 cURL 给你提供了一种将请求提交到 Elasticsearch 的便捷方式,并且安装 cURL 之后,你可以通过复制与粘贴去尝试书中的许多例子。
安装cURL 可参考《windows(64位)下使用curl安装》、《windows环境下 curl 安装和使用》,其中有windows控制台curl中文乱码的解决方法。
注意事项
运行elasticsearch6.3.0版本官网的例子时,应该如下运行
curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H "Content-Type: application/json" -d "{ \"name\": \"John Doe\"}"
参数都应该用双引号,而直接复制官网例子,如Content-Type: application/json
是单引号,此时会报"Content-Type header [application/x-www-form-urlencoded] is not supported"
;对于双引号内部的双引号,要加反斜杠;对于josn格式的数据,应该写在同一行,不要用美化后的格式;
操作 | 命令 | 说明 |
---|---|---|
索引文档 | PUT twitter/_doc/1 | |
索引文档 | PUT twitter/_doc/1?version=2 | 都完整覆盖 |
索引文档 | PUT twitter/_doc/1?op_type=create | |
索引文档 | PUT twitter/_doc/1/_create | |
索引文档 | POST twitter/_doc/ | |
索引文档 | POST twitter/_doc?routing=kimchy | |
索引文档 | PUT twitter/_doc/1?timeout=5m | |
查询文档 | curl -X GET "localhost:9200/twitter/_doc/0?pretty" | |
查询文档 | curl -I HEAD "localhost:9200/twitter/_doc/0" | HTTP/1.1 200 OK<br>content-type: application/json; <br>charset=UTF-8<br>content-length: 40 |
查询文档 | GET twitter/_doc/0?_source=false | 不显示source的具体内容,只告知source有无内容 |
查询文档 | GET twitter/_doc/0?_source_include=*.id&_source_exclude=entities | 按照过滤条件显示source的部分内容 |
查询文档 | GET twitter/_doc/0?_source=*.id,retweeted | 按照过滤条件显示source的部分内容 |
设置索引格式 | curl -X PUT "localhost:9200/twitter" -H "Content-Type: application/json" -d"{ \"mappings\": { \"_doc\": { \"properties\": { \"counter\": { \"type\": \"integer\", \"store\": false }, \"tags\": { \"type\": \"keyword\", \"store\": true } } } }}" | 如果索引已经存在会出错 |
查询文档 | curl -X GET "localhost:9200/twitter/_doc/1?stored_fields=tags,counter" | 如果不传stored_fields会显示完整的_source;传的部分内容stored_fields则只显示符合条件的fileds |
索引文档 | curl -X PUT "localhost:9200/twitter/_doc/2?routing=user1" -H "Content-Type: application/json" -d"{ \"counter\" : 1, \"tags\" : [\"white\"]}" | 增加_routing这个域,增加一个域可能会使得查询的时候更好过滤 |
查询文档 | curl -X GET "localhost:9200/twitter/_doc/2?routing=user1&stored_fields=tags,counter" | |
查询文档 | curl -X GET "localhost:9200/twitter/_doc/1/_source" | 直接获取_source,而不显示其他filed |
查询文档 | curl -X GET "localhost:9200/twitter/_doc/1/_source?_source_include=*.id&_source_exclude=entities" | 加入过滤条件 |
删除文档 | curl -X DELETE "localhost:9200/twitter/_doc/1" | |
删除文档 | curl -X DELETE "localhost:9200/twitter/_doc/1?routing=kimchy" | |
删除文档 | curl -X DELETE "localhost:9200/twitter/_doc/1?timeout=5m" | |
删除type和index | 操作方法类似 | |
删除文档 | curl -X POST "localhost:9200/twitter/_delete_by_query" -H "Content-Type: application/json" -d"{ \"query\": { \"match\": { \"message\": \"some message\" } }}" | 按照查询条件进行删除 |
删除文档 | curl -X POST "localhost:9200/twitter/_doc/_delete_by_query?conflicts=proceed" -H "Content-Type: application/json" -d"{ \"query\": { \"match_all\": {} }}" | |
删除文档 | curl -X POST "localhost:9200/twitter,blog/_docs,post/_delete_by_query" -H "Content-Type: application/json" -d"{ \"query\": { \"match_all\": {} }}" | 同时在多个索引中删除文档 |
删除文档 | curl -X POST "localhost:9200/twitter/_delete_by_query?routing=1" -H "Content-Type: application/json" -d"{ \"query\": { \"range\" : { \"age\" : { \"gte\" : 10 } } }}" | |
删除文档 | curl -X POST "localhost:9200/twitter/_delete_by_query?scroll_size=5000" -H "Content-Type: application/json" -d"{ \"query\": { \"term\": { \"user\": \"kimchy\" } }}" | |
任务查询 | curl -X GET "localhost:9200/_tasks?detailed=true&actions=*/delete/byquery" | 按照任务命令查询 |
任务查询 | curl -X GET "localhost:9200/_tasks/taskId:1" | 按照任务id查询 |
取消任务查询 | curl -X POST "localhost:9200/_tasks/task_id:1/_cancel" | |
取消任务查询 | curl -X POST "localhost:9200/_delete_by_query/task_id:1/_rethrottle?requests_per_second=-1" | |
按slice删除 | curl -X POST "localhost:9200/twitter/_delete_by_query" -H "Content-Type: application/json" -d"{ \"slice\": { \"id\": 0, \"max\": 2 }, \"query\": { \"range\": { \"likes\": { \"lt\": 10 } } }}" | |
更多用法可查官网 |
查询亿级数据毫秒级返回!牛逼哄哄的ElasticSearch是如何做到的?
实践
滴滴基于 ElasticSearch 的一站式搜索中台实践
日均5亿查询量的京东订单中心,为什么舍MySQL用ES?
Linux下Nutch分布式配置和使用
Solar学习
solr简介、学习详细过程!(超详细~)
Solar学习(一)—————>>>>>>>>>>>solr的最简单的了解
Solr开发文档
solr的基本使用