elasticsearch 查询数据
一、随机获取数据
- 在
query
的同级下添加下面代码
"sort": {
"_script": {
"script": "Math.random()",
"type": "number"
}
}
二、模糊查询
1、prefix 前缀查询
- prefix 前缀查询,查询 id 以 “aa-” 开头的数据,
_source
段值为查询后需要返回的字段
GET 索引名/_search
{
"query": {
"bool": {
"filter": [
{
"prefix": {
"id": "aa-"
}
}
]
}
},
"_source": ["title","id"]
}
2、wildcard 通配符查询
- wildcard 通配符查询, 查询 id 以 “aa-” 开头的数据
GET 索引名/_search
{
"query": {
"bool": {
"filter": [
{
"wildcard": {
"id": "aa-*"
}
}
]
}
},
"_source": ["title","id"]
}
通配符 | 含义 | 实例 |
---|---|---|
* | 匹配 0 或多个字符 | a*b,a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如 aabcb, axyzb, a012b, ab |
? | 匹配任意单个字符 | a?b,a与b之间有且只有一个字符, 可以是任意字符, 如 aab, abb, acb, a0b |
[list] | 匹配 list 中的任意单个字符 | a[xyz]b,a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如 axb, ayb, azb。 |
[!list] | 匹配除 list 中的任意单一字符 | a[!0-9]b,a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如 axb, aab, a-b。 |
[c1-c2] | 匹配 c1-c2 中的任意单一字符 | a[0-9]b,匹配0与9之间其中一个字符,如 a0b, a1b… a9b |
匹配 s1 或 s2 (或更多)中的一个字符串 | a{abc,xyz,123}b,a与b之间只能是abc或xyz或123这三个字符串之一 |
3、regexp 正则查询
GET 索引名/_search
{
"query": {
"bool": {
"filter": [
{
"regexp": {
"id": "aa-.*"
}
}
]
}
},
"_source": ["title","id"]
}
三、多字段查询 best_fields、most_fields、cross_fields
参考链接:https://elastic.blog.csdn.net/article/details/111412721
四、通用查询方法
$elastickeyboard['query']['bool']['must'][] = array(
'bool'=>array(
'must_not' => array(
'match'=>array(
'id' => $sucaiid
)
)
)
);
# 需要添加查询条件继续使用 $elastickeyboard['query']['bool']['must'][] = array(...) 即可,追加进 must 数组,相当于 mysql 的 and 查询
五、查询某个字段为空的数据
GET 索引名/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"cate1": "PPT背景音乐"
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "downpath"
}
}
}
}
]
}
}
}