q - 查询指定匹配 使用Lucene查询语法,该查询组合

作者: 足球  发布:2019-12-08

试行下边那几个查询:

Python Elasticsearch api

 

陈诉:ElasticSearch是四个基于Lucene的追寻服务器。它提供了三个布满式多顾客技巧的全文字笔迹核准索引擎,基于RESTful web接口。上面介绍了动用Python API接口进行多少查询,方便别的系统的调用。

安装API

[python] view plaincopy

 

  1. pip install elasticsearch  

建立es连接

[python] view plaincopy

 

  1. from elasticsearch import Elasticsearch  
  2. es = Elasticsearch([{'host':'10.10.13.12','port':9200}])  

  

数据检索作用

[python] view plaincopy

 

  1. es.search(index='logstash-2015.08.20', q='http_status_code:5* AND server_name:"web1"', from_='124119')  

常用参数

index - 索引名

q - 查询钦赐相配 使用Lucene查询语法

from_ - 查询起首点 私下认可0

doc_type - 文档类型

size - 内定询问条数 暗中认可10

田野(field卡塔尔(قطر‎ - 钦点字段 逗号分隔

sort - 排序 字段:asc/desc

body - 使用Query DSL

scroll - 滚动查询

总计查询功用
# 语法同search大致相通,但只输出总结值

[python] view plaincopy

 

  1. In[52]: es.count(index='logstash-2015.08.21', q='http_status_code:500')  
  2. Out[52]:{u'_shards':{u'failed':0, u'successful':5, u'total':5}, u'count':17042}  

  

文化扩张

滚动demo

[python] view plaincopy

 

  1. # Initialize the scroll  
  2. page = es.search(  
  3.     index ='yourIndex',  
  4.     doc_type ='yourType',  
  5.     scroll ='2m',  
  6.     search_type ='scan',  
  7.     size =1000,  
  8.     body ={  
  9.     # Your query's body  
  10. })  
  11.   
  12. sid = page['_scroll_id']  
  13. scroll_size = page['hits']['total']  
  14.   
  15. # Start scrolling  
  16. while(scroll_size >0):  
  17.     print "Scrolling..."  
  18.     page = es.scroll(scroll_id = sid, scroll ='2m')  
  19.     # Update the scroll ID  
  20.     sid = page['_scroll_id']  
  21.     # Get the number of results that we returned in the last scroll  
  22.     scroll_size = len(page['hits']['hits'])  
  23.     print "scroll size: "  str(scroll_size)  
  24.     # Do something with the obtained page  

如上demo完成了三次取多少数码,数据取完事后截至,不会拿走到最新更新的数码。大家滚动完之后想赢得最新数据咋办?滚动的时候会有一个总计值,如total: 5。跳出循环之后,大家得以用_from参数稳固到5最早滚动之后的数额。

Query DSL

range过滤器查询范围

gt: > 大于
lt: < 小于
gte: >= 大于或等于
lte: <= 小于或等于

[python] view plaincopy

 

  1. "range":{  
  2.     "money":{  
  3.         "gt":20,  
  4.         "lt":40  
  5.     }  
  6. }  

  

bool组合过滤器

must:全数分句都不得不协作,与 AND 相近。
must_not:全数分句都必须要不包容,与 NOT 相像。
should:至稀有三个分句相称,与 OLAND 相似。

[python] view plaincopy

 

  1. {  
  2.     "bool":{  
  3.       "must":[],  
  4.       "should":[],  
  5.       "must_not":[],  
  6.     }  
  7. }  

term过滤器

term单过滤

[python] view plaincopy

 

  1. {  
  2.     "terms":{  
  3.       "money":20  
  4.     }  
  5. }  

  

terms复数版本,允许多少个非常原则

[python] view plaincopy

 

  1. {  
  2.     "terms":{  
  3.       "money": [20,30]  
  4.     }  
  5. }  

正则查询 

[python] view plaincopy

 

  1. {  
  2.     "regexp": {  
  3.         "http_status_code": "5.*"  
  4.     }  
  5. }  

match查询新萄京赌场官网,

match 准确相配

[python] view plaincopy

 

  1. {  
  2.     "match":{  
  3.       "email":"123456@qq.com"  
  4.     }  
  5. }  

multi_match 多字段搜索

[python] view plaincopy

 

  1. {  
  2.     "multi_match":{  
  3.       "query":"11",  
  4.       "fields":["Tr","Tq"]  
  5.     }  
  6. }  

demo

得到近些日子有小时的数量

[python] view plaincopy

 

  1. {'query':  
  2.     {'filtered':  
  3.         {'filter':  
  4.             {'range':  
  5.                 {'@timestamp':{'gt':'now-1h'}}  
  6.             }  
  7.         }  
  8.     }  
  9. }  

  

标准过滤查询

[python] view plaincopy

 

  1. {  
  2.     "query":{  
  3.         "filtered":{  
  4.             "query":{"match":{"http_status_code":500}},  
  5.             "filter":{"term":{"server_name":"vip03"}}  
  6.         }  
  7.     }  
  8. }  

Terms Facet 单字段总结

[python] view plaincopy

 

  1. {'facets':  
  2.     {'stat':  
  3.         {'terms':  
  4.             {'field':'http_status_code',  
  5.               'order':'count',  
  6.         'size':50}  
  7.         }  
  8.     },  
  9.     'size':0  
  10. }  

   

一遍总括多个字段

[python] view plaincopy

 

  1. {'facets':  
  2.     {'cip':  
  3.         {'terms':  
  4.             {'fields':['client_ip']}},  
  5.               'status_facets':{'terms':{'fields':['http_status_code'],  
  6.               'order':'term',  
  7.               'size':50}}},  
  8.         'query':{'query_string':{'query':'*'}},  
  9.     'size':0  
  10. }  

  

五个字段一齐计算

[python] view plaincopy

 

  1. {'facets':  
  2.     {'tag':  
  3.         {'terms':  
  4.             {'fields':['http_status_code','client_ip'],  
  5.               'size':10  
  6.            }  
  7.         }  
  8.     },  
  9.     'query':  
  10.         {'match_all':{}},  
  11.     'size':0  
  12. }  

  

数码组装q - 查询指定匹配 使用Lucene查询语法,该查询组合了查询类型与过滤器。

以下是kibana首页的demo,用来总括风姿罗曼蒂克段时间内的日记数量

[python] view plaincopy

 

  1. {  
  2.   "facets": {  
  3.     "0": {  
  4.       "date_histogram": {  
  5.         "field": "@timestamp",  
  6.         "interval": "5m"  
  7.       },  
  8.       "facet_filter": {  
  9.         "fquery": {  
  10.           "query": {  
  11.             "filtered": {  
  12.               "query": {  
  13.                 "query_string": {  
  14.                   "query": "*"  
  15.                 }  
  16.               },  
  17.               "filter": {  
  18.                 "bool": {  
  19.                   "must": [  
  20.                     {  
  21.                       "range": {  
  22.                         "@timestamp": {  
  23.                           'gt': 'now-1h'  
  24.                         }  
  25.                       }  
  26.                     },  
  27.                     {  
  28.                       "exists": {  
  29.                         "field": "http_status_code.raw"  
  30.                       }  
  31.                     },  
  32.                     # --------------- -------  
  33.                     # 此处加相配条件  
  34.                   ]  
  35.                 }  
  36.               }  
  37.             }  
  38.           }  
  39.         }  
  40.       }  
  41.     }  
  42.   },  
  43.   "size": 0  
  44. }  

  

即便想增加相称原则,在上述代码标记部分加上过滤条件,依照以下代码格式就可以

[python] view plaincopy

 

  1. {  
  2. "query": {  
  3.     "query_string": {"query": "backend_name:baidu.com"}  
  4.     }  
  5. },  

首先次实施该查询之后,过滤器会被es缓存起来,若是三番三遍的别的查询也要动用该过滤器,则她会被重复使用,防止es重复加载相关数据
(注:内容收拾自《深入精晓Elasticsearch》)

被缓存的过滤器无需开销过多的内部存款和储蓄器,因为她们只储存了什么文书档案能与过滤器相匹配的相干音信,何况可供后续全部与之息息相关的询问重复使用,从而比相当大的滋长了查询品质

优化那个查询:
姓名有太多或许性,它不是完美的缓问候选另一半,而时代是,我们选取另生机勃勃种查询办法,该查询组合了查询类型与过滤器:

该查询能查询出满意指定姓名和名落孙山时代条件的足球运动员,唯有同期满意八个条件的询问才足以被缓存起来。

{
    "query":{
        "filtered":{
            "query":{
                "term":{"name":"joe"}
            },
            "filter":{
                "term":{"year":1981}
            }
        }
    }
}
{
    "query":{
        "bool":{
            "must":[
            {
                "term":{"name":"joe"}    
            },
            {
                "term":{"year":1981}
            }
            ]
        }
    }
}

elasticsearch提供了意气风发种新鲜的缓存,即过滤器缓存(filter cache),用来存款和储蓄过滤器的结果

接待访谈本身博客:http://wangnan.tech

本文由新浦京3730发布于足球,转载请注明出处:q - 查询指定匹配 使用Lucene查询语法,该查询组合

关键词: 日记本 新浦京3730 Elastic...