elastic search实践(2)

Elastic search查询

建模和准备数据

由于赛事机构的参加人员较多,且使用比较频繁,为了避免单一索引引起频繁操作,这里我们构建动态索引。索引的命名规则为:mock_data3_ + agencyId.

为了保证检索的效率,采用冗余的模型。在document中,建立nested的类型。(其原因如下:1. 对业务使用场景来说,对查询的效率要求较高;使用parent child的关联,其效率为单一文档的十分之一左右;2. 冗余的数据,在elastic search中保存在磁盘,都经过压缩,且磁盘空间代价较小;3. 对较大的文档,可能在建立index的耗时相对较长,这是业务可以接受的情形。)

相关的配置如下:

  1. 配置命令
PUT mock_data3_180103
{
  "mappings": {
    "doc": {
      "properties": {
        "registrations": {
          "type": "nested" 
        }
      }
    }
  }
}
  1. 建立index
PUT mock_data3_180103/doc/08C0B894-5CEE-4787-9DBB-00014256B7CE
{
  "agencyId": 180103,
  "addOnRevenue": 0.00,
  "openRate": 0,
  "emailRevenue": 0.00,
  "lastName":"Allabach",
  "address":{
    "city":"Centreville",
    "postalCode":"49032",
    "stateProvince":"MI",
    "line1":"27095 Marvin Rd"
   },
  "registrations": [
      {
        "eventName": "color run 2018",
        "priceCategoryName": "run 12k",
        "eventId": 12323,
        "priceCategoryId": 456,
        "id":123,
        "orderNumber": "C-0000119C",
        "registrationNumber": "R-00000DYB",
        "age": 18,
        "eventStartDate": "2009-07-20 20:07:52",
        "eventEndDate": "2018-07-21 20:07:52",
        "registrationDate": "2009-07-21 20:0:52",
        "activeUrl": "http://www.active.com",
        "location": "test location",
        "division": "division",
        "bib": "111111111111111111111",
        "wave": "tessdsdsds",
        "category": "registration category",
        "sport": "Running",
        "distance": "Marathon"
      },
      { 
        "eventName": "eventName",
        "priceCategoryName": "priceCategoryName",
        "eventId": 2382323,
        "priceCategoryId": 32322,
        "id":456,
        "orderNumber": "C-00002323C",
        "registrationNumber": "R-089DYB",
        "age": 20,
        "eventStartDate": "2010-07-20 20:07:52",
        "eventEndDate": "2018-07-21 20:07:52",
        "registrationDate": "2009-07-21 20:0:52",
        "activeUrl": "http://www.active.com",
        "location": "test location",
        "division": "division",
        "bib": "111111111111111111111",
        "wave": "tessdsdsds",
        "teamId": 123456,
        "teamName": "test team",
        "teamCaptainName": "test team captain",
        "category": "registration category",
        "sport": "Running",
        "distance": "5K"
      }
  ],  
  "gender":"FEMALE",
  "registrationRevenue": 29.99,
  "clickedCount":0,
  "clickedRate": 0,
  "dateOfBirth":"1975-09-11",
  "stars": 3,
  "sendCount":1,
  "engagementRate":"F",
  "firstName":"Shellie",
  "revenue": 29.99,
  "phoneNumber":"2697182152",
  "registrationCount":1,
  "openCount":0,
  "email":"MSSQLSERVERB128D6A6@null.activenetwork.com",
  "agencyName": "the color run"
}

Elastic search查询相关命令

简单的嵌套查询

GET mock_data3_180103/_search
{
  "query": {
    "nested": {
      "path": "registrations",
      "query": {
        "bool": {
          "must": [
            { "match": { "registrations.eventName": "color run 2018" }},
            { "match": { "registrations.eventId":  123232112 }} 
          ]
        }
      }
    }
  }
}

布尔过滤器编辑

一个 bool 过滤器由三部分组成:

{
   "bool" : {
      "must" :     [],
      "should" :   [],
      "must_not" : [],
   }
}

must
所有的语句都 必须(must) 匹配,与 AND 等价。

must_not
所有的语句都 不能(must not) 匹配,与 NOT 等价。

should
至少有一个语句要匹配,与 OR 等价。

范围

Elasticsearch 有 range 查询

gt: > 大于(greater than)

lt: < 小于(less than)

gte: >= 大于或等于(greater than or equal to)

lte: <= 小于或等于(less than or equal to)

缺失查询编辑

这个 missing 查询本质上与 exists 恰好相反: 它返回某个特定 值字段的文档,与以下 SQL 表达的意思类似:

GET /my_store/products/_search
{
   "query" : {
      "filtered" : { 
         "filter" : {
            "bool" : {
              "should" : [
                 { "term" : {"price" : 20}}, 
                 { "term" : {"productID" : "XHDK-A-1293-#fJ3"}} 
              ],
              "must_not" : {
                 "term" : {"price" : 30} 
              }
           }
         }
      }
   }
}

案列

  1. 查询满足以下条件:

eventId= 2382323

stars between 3 to 30

first name like Shellie

GET mock_data3_180103/_search
{
  "query": {
    "bool": {
      "must": [
         {"nested": {
            "path": "registrations",
            "query": {
              "bool": {
                "must": [
                  { "match": { "registrations.eventId": 2382323 }}
                ]
              }
            }
           }
          },
          {"match": {
            "firstName": {
                  "query": "Shellie",
                  "type":  "phrase"
              }
            }
          },
          {"range": {
            "stars": {
              "gte": 3,
              "lte": 30
            }
          }
            
        }
      ] 
      
    }
  }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • Elastic+logstash+head简单介绍 一. 概述 ElasticSearch是一个基于Lucene的...
    柒月失凄阅读 4,235评论 0 4
  • 我们都拥有青春 只是那个青春不再是当年的青春 我看着青春举步维艰 整个时代都灰蒙蒙的 不带有一丝活力 理想的抛弃,...
    专属9877阅读 136评论 0 0
  • 心态决定苦与乐,观念决定成与败,人生是道风景快乐是种心境。人生如喝过的茶,少了苦涩,多了平和,淡了青春的气息,浓了...
    简书感悟人生阅读 409评论 0 1
  • 天蓝云静 海色安然 而我确知 你已来而复归 深沉处 惊涛已过 沙覆疮痍 我们错过了两生约期 你匆匆开放急急凋敝 在...
    菜根宴阅读 365评论 1 0