ElasticSearch基本查询

请求均为 POST 请求,Content-Type 为 application/json

curl -XPOST http://localhost:9200/books/_search

词条查询

仅匹配在给定字段中含有该词条的文档,而且是确切的未经分析的词条:

{
    "query":{
        "term":{
            "title":"ElasticSearch"
        }
    }
}

由于是未经分析的,所以词条查询要提供跟索引文档中的词条完全匹配的词条。

多词条查询

多词条查询可以匹配多个词条。
下边的查询可以查 title 字段包含 ElasticSearch 或者 ES 的文档:

{
    "query":{
        "terms":{
            "title":["ElasticSearch","ES"]
        }
    }
}

match查询

match 查询会将 query 参数中的值加以分析,然后进行查询。match 查询的词条分析时,是和建立索引时相同的分析器。
比如:

{
    "query":{
        "match":{
            "word":"金牛"
        }
    }
}

查询结果为:

[{
        "_index": "wildcard",
        "_type": "english",
        "_id": "AWFs0YF3FQ7g3z03lNKT",
        "_score": 14.206823,
        "_source": {
            "word": "金牛座"
        }
    },
    {
        "_index": "wildcard",
        "_type": "english",
        "_id": "AWFukkLaFQ7g3z03lN2L",
        "_score": 13.1050625,
        "_source": {
            "word": "金犀牛"
        }
    },
    {
        "_index": "wildcard",
        "_type": "english",
        "_id": "AWFs0YF3FQ7g3z03lNKh",
        "_score": 8.327969,
        "_source": {
            "word": "抵牛"
        }
    }
]

这个查询 word 字段是分词的,所以查询结果中,含有“金”或“牛”,以及同时含有“金”、“牛“二字的都将被检索出。

mutil_match查询

mutil_match 和 match 类似,但其同时对多个字段进行查询,使用 fields 参数即可:

{
    "query":{
        "multi_match":{
            "query":"金牛",
            "fields":["word","name"]
        }
    }
}

query_string查询

query_string 查询支持全部的 Apache Lucene 查询语法,它使用一个查询解析器把提供的文本构建成实际的查询:

{
    "query":{
        "query_string":{
            "default_field":"word",
            "query":"金牛"
        }
    }
}

前缀查询

前缀查询,匹配特定字段以给定的前缀开始的文档:

{
    "query":{
        "prefix":{
            "title":"Elastic"
        }
    }
}

标识符查询

标识符查询通过给定的文档唯一标识符来查找文档,查询只针对内部的 _uid 字段来查询,而不是 _id 字段,查询 json 报文体如下:

{
    "query":{
        "ids":{
            "values":["AWFs0YF3FQ7g3z03lNKT","AWFs0YF3FQ7g3z03lNKi"]
        }
    }
}

也可以带上文档的类型 type 来查找集合中特定类型的文档:

{
    "query":{
        "ids":{
            "type":"article",
            "values":["AWFs0YF3FQ7g3z03lNKT","AWFs0YF3FQ7g3z03lNKi"]
        }
    }
}

通配符查询

通配符查询支持 ? 和 * 来通配字符:

{
    "query":{
        "wildcard":{
            "title":"ElasticSear?h"
        }
    }
}

通配符查询不太注重性能,在可能时应尽量避免,特别是要避免前缀通配符(以通配符开始的词条)。

范围查询

范围查询使我们能够找到在某一字段值在某个范围里的文档,字段可以是数值型,也可以是基于字符串的(将映射到一个不同的Apache Lucene查询)。范围查询只能针对单个字段,查询参数应封装在字段名称中。

{
    "query": {
        "range": {
            "year": {
                "gte": 1700,
                "lte": 1900
            }
        }
    }
}

正则表达式查询

通过正则表达式查询,可以使用正则表达式来查询文本。

{
    "query": {
        "regexp": {
            "title": {
                "value": "Elasti.Searc[hk]",
                "boost": 10.0
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值