入门只是第一步,想要成功删库跑路,还有很长的路要走,学而时习之。这篇用于记录入门之后遇到的更多状况,待更新。
大家也可以点这里,查看虽然过时,但也有一定参考价值的Elasticsearch: 权威指南(中文版)。
当然,英文好的小伙伴还是翻看和自己所使用的ElasticSearch相同的英文版本,进去之后找到自己关注的目录点other version。
顺便说一句我的示例代码是基于6.4.2的,有些部分可能有差别。
1、嵌套对象查询nested/mapping
假如咱们要存的数据有更复杂的嵌套关系,比如对象中的一个属性是一个新的对象数组:
简历中的语言能力是一个对象组成的数组:
POST my_index/resume/1
{
"language" : [
{"class":"eng", "rank": 100},
{"class":"jap", "rank": 60},
{"class":"spa", "rank": 70}
],
"name": "zhangsan"
}
试图搜索英文70分的人,却会搜出英文100分、日文70分的文档。原因:戳这里
GET my_index/resume/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"language.class": {
"value": "eng"
}
}
},{
"term": {
"language.rank": {
"value": "70"
}
}
}
]
}
}
}
要想实现这样复杂结构的搜索,需要使用嵌套结构,先用mappings/nested来定义这个结构:
GET my_index/_mapping/resume
DELETE my_index
PUT my_index
{
"mappings": {
"resume": {
"properties": {
"language": {
"type": "nested",
"properties": {
"class": {"type": "text"},
"rank": {"type": "integer"}
}
},
"name":{
"type": "text"
}
}
}
}
}
再用nested关键字来搜索:
GET my_index/resume/_search
{
"query": {
"nested": {
"path": "language",
"query": {
"bool": {
"must": [
{
"term": {
"language.class": {
"value": "eng"
}
}
},
{
"term": {
"language.rank": {
"value": 100
}
}
}
]
}
}
}
}
}
二、ElasticSearch深分页scroll和浅分页from-size
简介:
from-size,先查出全量然后从全量的from位置开始,取出size数量的文档。scroll,先通过_search/scroll命令查出卷标,然后通过卷标找出对应的文档集合。
https://www.cnblogs.com/xing901022/archive/2016/03/16/5284902.html(效率比较、写法比较)
https://www.jianshu.com/p/14aa8b09c789(scroll原理详解、参数意义)