Elasticsearch One:基本查询介绍了 elasticsearch 基本概念及基本查询,本文中介绍 query string 查询。
Query String query
可以用来创建一个比较复杂的查询搜索,包括通配符匹配,正则表达式,跨多个字段查询,但是语法严格。
You can use the query_string query to create a complex search that includes wildcard characters, searches across multiple fields, and more. While versatile, the query is strict and returns an error if the query string includes any invalid syntax.
举例
name field 中匹配包含 peter 的记录,有匹配的记录返回
{
"query": {
"query_string":{
"fields":["name"],
"query":"peter"
}
}
}
注意 query 中的 terms 是不会分词的
,倒排序中的 terms 中是完全匹配,而不是部分匹配,所以下面这个没有结果返回,尽管查询 peter 是有返回的。
{
"query": {
"query_string":{
"fields":["name"],
"query":"pet"
}
}
}
应用统配符,正则表达式等,Expert field中查询 pet 开头或则是 dav 开头的记录:
{
"query": {
"query_string":{
"fields":["name"],
"query":"pet* OR dav*"
}
},
"size":100
}
下面两个跟上面是等价的
{
"query": {
"bool":{
"should":[{"prefix":{"name":"pet"}}, {"prefix":{"name":"dav"}}]
}
},
"size":100
}
字段也可以放在 query 中用冒号隔开
{
"query":{
"query_string":{
"query":"name:pet* dav*"
}
},
"size":100
}
默认 query 中 terms 是 OR 的关系,下面是匹配 major 中包含 Clinical 或则 Psychology 的记录 28 条
{
"query": {
"query_string":{
"fields":["major"],
"query":"Clinical Psychology"
}
},
"size":50
}
加权,包含 david 的记录排前
{
"query":{
"query_string":{
"fields":["name"],
"query":"Peter david^3"
}
},
"size":100
}
AND 关系,匹配 major 中包含 Clinical 并且包含 Psychology 的记录返回 13 条
{
"query": {
"query_string":{
"fields":["major"],
"query":"Clinical AND Psychology"
}
},
"size":50
}
换一种说法:匹配 major 中包含 Clinical 并且包含 Psychology 的记录返回13条
{
"query":{
"query_string":{
"query":"major:(Clinical AND Psychology)"
}
}
}
NOT :major 字段中既不包含 Clinical 也不包含 Psychology 的记录
{
"query":{
"query_string":{
"query":"NOT major:(Clinical Psychology)"
}
}
}
}
字段 stats下面子字段 num 大于等于7的记录:
{
"query":{
"query_string":{
"query":"stats.num:>=7"
}
}
}
name 字段中包含 peter 或 david,并且 num 大于等于 7 的记录
{
"query":{
"query_string":{
"query":"(name:(peter david)) AND (stats.num:>=7)"
}
},
"size":100
}
参考:
Query string query
23 Useful Elasticsearch Example Queries