文档相似性

文本相似度计算-JaccardSimilarity和哈希签名函数

lucene学习

来源:孔浩Lucene视频教程

Lucene学习思维导图

搜索引擎 和 数据库 查询哪个块_twitter

分词流程图

搜索引擎 和 数据库 查询哪个块_twitter_02

分词器的类型

搜索引擎 和 数据库 查询哪个块_json_03

分词过滤器类型

搜索引擎 和 数据库 查询哪个块_twitter_04

分词结果输出

搜索引擎 和 数据库 查询哪个块_twitter_05

Lucene 4.0.0 core API

面向文档的数据库:(Elasticsearch的另一种用法)

Elasticsearch是一个基于lucene的分布式搜索引擎,但是我们也可以将其作为数据库使用。可参考:查询优化及查询方案设计 Elasticsearch 使用的详细教程:Elasticsearch 权威指南(中文版) 或官网:英文文档

日均5亿查询量的京东订单中心,为什么舍MySQL用ES

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的基本使用