我在使用elasticsearch查询时遇到了一些问题。所以基本上我想知道弹性搜索的sql等价物。
这个sql查询的等效弹性搜索语法是什么?
SELECT *
FROM people
WHERE name LIKE( $name% )
AND ( gender = 0 OR age < 18 )
AND id IN( 1, 2, 3 )
AND id NOT IN( 4, 5, 6 )
AND dead = 0
ORDER BY status desc,
TIME desc
*
仅作为示例
答案 0 :(得分:1)
使用布尔查询(和嵌套的布尔查询)允许您表达与sql请求相同的内容。 当查找其中一个元素(OR)时,将验证术语查询。
POST / index_name / people / _search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "John"
}
}
],
"filter": [
{
"bool": {
"must": [
{
"terms": {
"id": [
1,
2,
3
]
}
},
{
"term": {
"dead": 0
}
},
{
"bool": {
"should": [
{
"term": {
"gender": 0
}
},
{
"range": {
"age": {
"lt": 18
}
}
}
]
}
}
],
"must_not": [
{
"terms": {
"id": [
4,
5,
6
]
}
}
]
}
}
]
}
},
"sort": [
{
"status": {
"order": "desc"
},
"time": {
"order": "desc"
}
}
]
}