ElasticSearch搜索

作者: 写Bug的张小天 | 来源:发表于2018-01-18 15:22 被阅读0次

    ElasticSearch搜索

    搜索方式——ES有两种搜索方式:第一种是通过URL参数进行搜索,另一种是通过POST请求参数进行搜索。
    URL参数搜索
    请求:GET http://127.0.0.1:9200/xy_order/order/_search?参数,多个参数用&分开,参数的解释如下:

    参数 解释
    q 查询字符串,例如:q=syslog
    df 当查询中没有定义前缀的时候默认使用的字段
    analyzer 当分析查询字符串的时候使用的分词器
    lowercase_expended_terms 搜索的时候忽略大小写标志,默认为true
    analyze_wildcard 通配符或者前缀查询是否被分析,默认为false
    default_operator 默认多个条件的关系,AND或者OR,默认为OR
    lenient 如果设置为true,字段类型转换失败的时候将被忽略,默认为false
    explain 在每个返回结果中,将包含评分机制的解释
    _source 是否包含元数据,同时支持_source_include和_source_exclude
    fields 只返回索引中指定的列,过个列中间用逗号隔开
    sort 根据字段 名排序,例如fieldName:asc或者fieldName:desc
    track_scores 评分轨迹,当排序的时候,true表示返回评分的信息
    timeout 超时的时间设置
    terminate_after 在每个分片中查询的最大条数,如果设置,返回结果中会有一个terminated_early字段
    from 返回的索引匹配结果的开始值,默认为0
    size 搜索结果返回的条数,默认为10
    search_type 搜索的类型,可以是dfs_query_then_fetch,query_then_fetch,默认为query_then_fetch

    POST请求参数搜索

    请求:POST http://127.0.0.1:9200/xy_order/order/_search,参数在请求中
    参数是JSON格式的查询领域语法(query dsl),例如:

    {
        "query":{"term":{"cbid":"9414722503469204"}}
    }
    

    如果需要搜索分页,可以通过from size组合来进行,from表示从第几行开始,size表示查询多少条记录。from默认为0,size默认为10,例如:

    {
        "from":0,
        "size":10,
        "query":{
            "term":{"cbid":"9414722503469204"}
        }
    }
    

    搜索排序:
    当搜索的字段有多个时,可以对指定字段进行排序,例如下面的搜索优先对type字段进行排序,然后对message字段进行排序:

    {
        "sort":[
            {"amount":{"order":"asc"}},
            {"ConsumeTime":{"order":"desc"}}
        ]
    }
    

    当一个字段的内容有多个值的时候,系统支持一些计算进行排序,包括min、max、sum、avg、median(中间值),例如下面的请求表示order有多个值,取平均值排序的方式如下:

    {
        "query":{
            ...
        }
        "sort":[
            {"amount":{"order":"desc", "mode":"avg"}}
        ]
    }
    

    数据列过滤
    数据列过滤允许在查询的时候不显示原始数据,或者显示部分原始字段,例如不显示原始字段

    {
        "_source":false,
        "query":{"term":{"cbid":"9414722503469204"}}
    }
    

    显示部分文档列的方式如下:

    {
        "_source":"obj.*",
        "query":{"term":{"cbid":"9414722503469204"}}
    }
    

    还可以包含或者排除某些列

    {
        "_source":{
            "include":["book1.*","book2.*"],
            "exclude":["*.description"]
        },
        "query":{"term":{"cbid":"9414722503469204"}}
    }
    

    脚本支持
    对搜索是支持脚本的,例如,请求:POST http://127.0.0.1:9200/xy_order/order/_search?pretty
    参数如下:

    {
        "query":{
            "term":{"cbid":"9414722503469204"}
        },
        "script_fields":{
            "test1":{"script":"doc['cbid'].value *2"}
        }
    }
    

    相关文章

      网友评论

        本文标题:ElasticSearch搜索

        本文链接:https://www.haomeiwen.com/subject/uddwoxtx.html