Executing Searches
Elasticsearch中执行检索时使用
/_search API,默认情况下返回匹配的document中的所有字段。
(1)返回部分结果
在elasticsearch中用_source标记。
GET /bank/_search
{
"query": { "match_all": {} },
"_source": ["account_number", "balance"]
}
说明:
(1)“_source”:以上例子中只返回匹配结果中的account_number和balance字段。
(2)match_all:表示匹配所有的document
返回部分结果类似sql中
select field1, field2 from table
(2)match条件匹配
特定结果的返回使用”query”属性控制。
(1)精确查询
GET /bank/_search
{
"query": { "match": { "account_number": 20 } }
}
这个例子返回account_number=20的所有文档。
sql中类似于:
select * from table where account_number=20
(2)模糊查询
GET /bank/_search
{
"query": { "match": { "address": "mill" } }
}
返回address中包含“mill”的所有document。
sql中类似于:
select * from table where address like ‘%mill%’
(3)“或”操作查询
GET /bank/_search
{
"query": { "match": { "address": "mill lane" } }
}
返回address中包含”mill” 或”lane”的document。 中间以空格分割。
如果想要匹配“mill lane”这个词组的时候应该怎样查询呢?
(4) 短语匹配
GET /bank/_search
{
"query": { "match_phrase": { "address": "mill lane" } }
}
使用“match_phrase”进行句子或者短语的匹配。例子中返回address中包含”mill lane” 的document。
综上可以看到“match”可以匹配数字或者单额word,“match_phrase”才能匹配词组。
(3)bool条件匹配
bool查询帮助我们把小的查询条件组合成一个大的查询条件。
(1)组合多个match语句,表示“与”关系
GET /bank/_search
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
“bool”的条件中使用的是”must”,返回所有address中包含“mill”和“lane”的document
(2)组合多个match语句,表示“或”关系
GET /bank/_search
{
"query": {
"bool": {
"should": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
“bool”的条件中使用的是”should”,返回所有address中包含“mill”或者“lane”的document。
(3)组合多个match语句,表示“非”关系
GET /bank/_search
{
"query": {
"bool": {
"must_not": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}
“bool”的条件中使用的是”must not”,返回所有address中既不包含“mill”也不包含“lane”的document。
(4)多种bool条件查询混合使用
GET /bank/_search
{
"query": {
"bool": {
"must": [
{ "match": { "age": "40" } }
],
"must_not": [
{ "match": { "state": "ID" } }
]
}
}
}
上面的查询语句表示查询age=40&state中不包含ID的。
综上bool在查询中嵌套在“query”的下一层,可以使用“must”,“should”,“must not”表示bool条件,也可以将不同的条件组合使用。