目录: 一、针对这次装B 的解释

二、下载,安装插件elasticsearch-1.7.0

     三、索引的mapping

   四、 查询

   五、对于相关度的大牛的文档

四、 查询

1. 查询的官网的文档

   

    
    
2.  查询的rest格式
    
 
3.  介绍用过的查询方式
      一般的查询
      http://blog.csdn.net/dm_vincent/article/details/41820537
 
        查询出的数据字段的解释
  - took —— Elasticsearch执行这个搜索的耗时,以毫秒为单位

- timed_out —— 指明这个搜索是否超时
  - _shards —— 指出多少个分片被搜索了,同时也指出了成功/失败的被搜索的shards的数量
  - hits —— 搜索结果
  - hits.total —— 能够匹配我们查询标准的文档的总数目
  - hits.hits —— 真正的搜索结果数据(默认只显示前10个文档)

  - _score和max_score —— 现在先忽略这些字段
    (1) match匹配    
 "query":{
"match":{
"UserName":"BWH-PC"
}
}
        match是匹配一个key对应的value,value可以是多个,但是必须是这个字段下的,查找多个字段的是不行.
 {
"query": {
"match": {
"text": "quick fox"
}
}
}

相当于

 {
"query": {
"bool": {
"should": [
{
"term": {
"text": "quick"
}
},
{
"term": {
"text": "fox"
}
}
]
}
}
}
    (2) multi_match 匹配 
 {
"query": {
"multi_match": {
"query": "bbc0641345dd8224ce81bbc79218a16f",
"operator": "or",
"fields": [
"*.machine"
]
}
}
}
        注意:如果没有machine这个字段,就会报错,需要在fields后面添加一个""
                   fields中可以添加*做模糊----fields":  ["f*.name"]【查询的是f开头的】
                    "operator":"or" 指的是对query中的多个值查询方式
                    其中的type的配置报错,需要进一步学习
       (3) bool查询
    

 {
"bool": {
"must": {
"match": {
"title": "how to make millions"
}
},
"must_not": {
"match": {
"tag": "spam"
}
},
"should": [
{
"match": {
"tag": "starred"
}
},
{
"range": {
"date": {
"gte": "2014-01-01"
}
}
}
]
}
}
       must:所有分句都必须匹配,与 AND 相同。
       must_not:所有分句都必须不匹配,与 NOT 相同。
       should:至少有一个分句匹配,与 OR 相同。   
      (4) term查询
           (a) 在term查询中,字段是field.name1,那么term不能查,以为"."必须是域  
             "term":{"f1.name":"a1"}-----那么意思是查找的是f1的field下面的name
              但是数据中有"f1.name":"a1" ,那么term是查找不到这个, 所以数据中的key不能有"."
            (b) 在term中查询时候,查询的字段的值不能有大写,但是可以有空格 ---- 对数据中有大写,那么查询用小写,也会匹配到那个值的
    

 "term": {
"CapabilityDescriptions": "aa"
}
      (5)不计算存在的次数,判断存在就1分,当然可以指定分数    

 {
"query": {
"bool": {
"should": [
{
"constant_score": {
"query": {
"match": {
"description": "wifi"
}
}
}
},
{
"constant_score": {
"query": {
"match": {
"description": "garden"
}
}
}
},
{
"constant_score": {
"boost": {
"query": {
"match": {
"description": "pool"
}
}
}
}
}
]
}
}
}
      (6)   exists 过滤器 相当于is not null
    missing相当于is null
  【没查到的是null】
      (7) 过滤查询---了解到这种过滤会使得查询效率高,而不是单纯的查询完以后的过滤
            当执行 filtered 查询时,filter 会比 query 早执行。结果字节集会被传给 query 来跳过已经被排除的文档。这种过滤器提升性能的方式,查询更少的文档意味着更快的速度。
        (a)query带match     filter带term    【term是精确匹配单个字段 , terms中可以写多个的term】
    

 {
"query": {
"filtered": {
"query": {
"match": {
"email": "business opportunity"
}
},
"filter": {
"term": {
"folder": "inbox"
}
}
}
}
}
        (b)query没有,默认是查询match_all , fliter中带bool 【bool中再使用match或者match_all,需要用query包】
    

 {
"query": {
"filtered": {
"filter": {
"bool": {
"must": {
"term": {
"folder": "inbox"
}
},
"must_not": {
"query": {
"match": {
"email": "urgent business proposal"
}
}
}
}
}
}
}
}
        (c) tie_breaker ,在标题的网址中去查,是最佳字段的调优,是将匹配度乘以这个值
              tie_breaker的取值范围是0到1之间的浮点数,取0时即为仅使用最佳匹配子句(译注:和不使用tie_breaker参数的dis_max查询效果相同),取1则会将所有匹配的子句一视同仁。
          它的确切值需要根据你的数据和查询进行调整,但是一个合理的值会靠近0,(比如,0.1 -0.4),来确保不会压倒dis_max查询具有的最佳匹配性质。
 
        (d)range 过滤器,让你可以根据范围过滤:range过滤器也可以用于日期字段
    

  "range": {
    "price": {
    "gt": 20,
    "lt": 40
}
}
 {
"query": {
"filtered": {
"filter": {
"range": {
"price": {
"gte": 20,
"lt": 40
}
}
}
}
}
}
 {
"range": {
"timestamp": {
"gt": "2014-01-0100: 00: 00",
"lt": "2014-01-0700: 00: 00"
}
}
}
到所有最近一个小时的文档:

 {
"range": {
"timestamp": {
"gt": "now-1h"
}
}
}
            (e) 区别于 filtered ,post_filter查询就是先查询,后过滤, 效率没有前面的高 
后置过滤--post_filter元素是一个顶层元素,只会对搜索结果进行过滤。

警告:性能考量

只有当你需要对搜索结果和聚合使用不同的过滤方式时才考虑使用post_filter。有时一些用户会直接在常规搜索中使用post_filter。

不要这样做!post_filter会在查询之后才会被执行,因此会失去过滤在性能上帮助(比如缓存)。

post_filter应该只和聚合一起使用,并且仅当你使用了不同的过滤条件时。
                        ----下面的例子是可以过滤field的,multi_match必须使用query包,
                               match只能过滤没有被“包”的,必须multi_match是过滤被"包"的,
                                query_string中的是全文搜索,是可以查到所有的数据
             eg:查询machine是bbc0641345dd8224ce81bbc79218a16f,不管是否被字段包,都需要过滤出来
 {
"query": {
"query_string": {
"query": "*"
}
},
"post_filter": {
"bool": {
"should": {
"query": {
"bool": {
"should": [
{
"match": {
"machine": "bbc0641345dd8224ce81bbc79218a16f"
}
},
{
"match": {
"machine": "bbc0641345dd8224ce81bbc79218a16f"
}
}
]
}
}
}
}
}
}

    当然,在里面的每一个should中,可以去做很多变形,但是should多个子类时,必须用[]

    

 {
"query": {
"query_string": {
"query": "*"
}
},
"post_filter": {
"bool": {
"should": [
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "bbc0641345dd8224ce81bbc79218a16f",
"operator": "or",
"fields": [
"*.machine",
""
]
}
},
{
"multi_match": {
"query": "10.10.185.99",
"operator": "or",
"fields": [
"*.IPAddress",
""
]
}
}
]
}
}
},
{
"query": {
"bool": {
"must": [
{
"match": {
"machine": "bbc0641345dd8224ce81bbc79218a16f"
}
},
{
"match": {
"IPAddress": "10.10.11.11"
}
}
]
}
}
}
]
}
}
}
            (f) 这是查询中最让人恶心的:查询到结果以后,进行过滤(或者过滤以后进行查询)----其实这种复杂的,直接在query中查,最后在_score中过滤,0.1以下的就是不匹配(同事不让,原因不明,我感觉这很好用)
                          
 
               在一般的过滤中,比如"first":"a1"  那么只能过滤到第二个,不被name包的
                但是有时候,对于field没创建好的情况下,需要"包","不包"的都匹配上,就需要使用multi_match和match的联用
                在过滤中可以用match或者multi_match,query_string放的方式用query包
                   eg:查询 last = a2的,不管包还是不包的都要查询出来
      

 {
"query": {
"filtered": {
"query": {
"query_string": {
"query": "*"
}
},
"filter": {
"bool": {
"should": {
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "a2",
"operator": "or",
"fields": [
"*.last"
]
}
},
{
"match": {
"last": "a2"
}
}
]
}
}
}
}
}
}
}
}
8.   询条件添加以后,进行数量的检索_search?search_type=count
 
         
 
 

elasticsearch的rest搜索--- 查询的更多相关文章

  1. ElasticSearch High Level REST API【2】搜索查询

    如下为一段带有分页的简单搜索查询示例 在search搜索中大部分的搜索条件添加都可通过设置SearchSourceBuilder来实现,然后将SearchSourceBuilder RestHighL ...

  2. ElasticSearch第四步-查询详解

    ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...

  3. ElasticSearch中的简单查询

    前言 最近修改项目,又看了下ElasticSearch中的搜索,所以简单整理一下其中的查询语句等.都是比较基础的.PS,好久没写博客了..大概就是因为懒吧.闲言少叙书归正传. 查询示例 http:// ...

  4. ElasticSearch(8)-分布式搜索

    分布式搜索的执行方式 在继续之前,我们将绕道讲一下搜索是如何在分布式环境中执行的. 它比我们之前讲的基础的增删改查(create-read-update-delete ,CRUD)请求要复杂一些. 注 ...

  5. ElasticSearch(6)-结构化查询

    引用:ElasticSearch权威指南 一.请求体查询 请求体查询 简单查询语句(lite)是一种有效的命令行_adhoc_查询.但是,如果你想要善用搜索,你必须使用请求体查询(request bo ...

  6. ElasticSearch改造研报查询实践

    背景: 1,系统简介:通过人工解读研报然后获取并录入研报分类及摘要等信息,系统通过摘要等信息来获得该研报的URI 2,现有实现:老系统使用MSSQL存储摘要等信息,并将不同的关键字分解为不同字段来提供 ...

  7. elasticsearch基本概念与查询语法

    序言 后面有大量类似于mysql的sum, group by查询 elk === elk总体架构 https://www.elastic.co/cn/products Beat 基于go语言写的轻量型 ...

  8. Graylog日志管理系统---搜索查询方法使用简介

    Elasticsearch 是一个基于 Lucene 构建的开源.分布式.提供 RESTful 接口的全文搜索引擎 一.Search页面的各位置功能介绍: 1.日志搜索的时间范围 为了使用方便,预设有 ...

  9. 第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询

    第三百六十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的基本查询 1.elasticsearch(搜索引擎)的查询 elasticsearch是功能 ...

随机推荐

  1. POJ 3422 Kaka's Matrix Travels(费用流)

    POJ 3422 Kaka's Matrix Travels 题目链接 题意:一个矩阵.从左上角往右下角走k趟,每次走过数字就变成0,而且获得这个数字,要求走完之后,所获得数字之和最大 思路:有点类似 ...

  2. 利用Sails.js+MongoDB开发博客系统

    http://yoyoyohamapi.me/categories/利用Sails-js-MongoDB开发博客系统/ 利用Sails.js+MongoDB开发博客系统 Apr 14, 2016 利用 ...

  3. oracle 转让日期格式字符串

    字符串传递日期格式 SELECT trunc(to_date(SALE_MON,'yyyy-mm'),'y'),trunc(to_date(SALE_MON,'yyyy-mm'),'mm')  FRO ...

  4. 大哥可以写KMP该——达到strstr()

    在最后采访,面试官要求实现strstr(),当场就蒙了. 这个题目是模式匹配问题.<算法导论>里列出了几种字符串匹配算法: 朴素算法 |  Rabin-Karp | 有限自己主动机算法 | ...

  5. 玩转Web之JavaScript(一)-----javaScript语法总结(一) 与鼠标操作有关的语法

    click()  对象.click()  使对象被点击. event.clientX  返回最后一次点击鼠标 X 坐标值: event.clientY  返回最后一次点击鼠标 Y 坐标值: event ...

  6. ADN中国队参加微软Kinect他赢得了全国比赛三等奖,我们的创意项目与团队Kinect于Naviswork虚拟之旅

    以下是我的英语写了一个简短的总结,直接贴出来. 让我们知道我们在这参加Hackathon That's an exciting Hackathon for me and also China team ...

  7. Android开发学习总结——Android开发的一些相关概念(转)

    一.什么是3G.4G 1995年问世的第一代模拟制式手机(1G)只能进行语音通话. 1996到1997年出现的第二代GSM.CDMA等数字制式手机(2G)便增加了接收数据的功能 Ÿ 3G指的是第三代移 ...

  8. MAC OSX 进程间通信

    Mac OS在下面IPC方式很多类型,大约如下. 1. Mach API  2. CFMessagePort  3. Distributed Objects (DO) NSDistributedNot ...

  9. Git--Submodule使用

    项目模板中通常由前端保持,所以每次更新模板.我也要跟着变化项目. 随着时间的推移,这不是一个方法来找到,老这么维护.大型项目,更多的模板,真的很容易管理和维护. 然后头让我用submodule前端资源 ...

  10. 如何有效抓取SQL Server的BLOCKING信息

    原文:如何有效抓取SQL Server的BLOCKING信息 转自:微软亚太区数据库技术支持组 官方博客 http://blogs.msdn.com/b/apgcdsd/archive/2011/12 ...