Elasticsearch Two: query string 查询

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值