最近做项目遇到了一个文本检索功能,最终选择使用es做解决方案,想顺便整理一下相关知识,留给自己以后复习用
索引->类型->文档
安装版本为6.4.3
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-4-3
这里有个版本问题需要注意:在6以后不支持一个索引下有多个type在7版本中会移除type具体原因可见官网
https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html
使用插件elasticsearch-head实现可视化操作 Google的话在扩展程序里直接可以下
解压之后修改配置文件elasticsearch-6.4.3\elasticsearch-6.4.3 - slave2\config\elasticsearch.yml
建集群起三个服务
master的配置增加如下
http.cors.enabled: true//可跨域访问
http.cors.allow-origin: "*"//不设拦截
cluster.name: brainstorming//集群名
node.name: master//结点名
node.master: true//是否为主结点
随从的配置(两个随从node.name和port设置成不一样即可)
cluster.name: brainstorming
node.name: slave2
network.host: 127.0.0.1//配置ip
http.port: 8000//配置端口
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]//用来连接主节点所以设为主节点所在的网络
创建索引
PUT 127.0.0.1:9200/book 索引名
{
"settings" : {
"index" : {
"number_of_shards" : 5, //分片数
"number_of_replicas" :1//副本数
}
},
"mappings": {
"nouvel": {//类型名
"properties": {
"word_count": {
"type": "integer"
},
"author": {
"type": "keyword"
},
"title": {
"type": "text"
},
"publish_date": {
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis",
"type": "date"
}
}
}
}
}
使用POST请求 hostnet:port/index/_search
子条件查询
query context
查询时会计算一个score
有全文本查询和字段级别查询
模糊匹配 全文本的一种
{
"query": {
"match":{
"author":"xiaowang"
}
}
}
习语匹配(不拆分字段)
{
"query": {
"match_phrase":{
"title":"ElasticSearch入门"
}
}
}
多字段模糊匹配
{
"query": {
"multi_match":{
"query":"ElasticSearch入门",
"fields":["title","author"]
}
}
}
语法查询
{
"query": {
"query_string":{
"query":"ElasticSearch OR JAVA"
}
}
}
结构化查询里的范围查询
{
"query": {
"range": {
"word_count":{
"gte": 1000,//大于等于
"lte": 2000
}
}
}
}
filter context
{
"query": {
"bool": {
"filter": {
"term":{
"count":1000//过滤条件
}
}
}
}
}
filter查询会被es缓存