美文网首页
ElasticSearch Server 扩展的弹性搜索解决方案

ElasticSearch Server 扩展的弹性搜索解决方案

作者: chjxidian | 来源:发表于2019-07-19 21:34 被阅读0次

    ElasticSearch REST API 操作:

    GET 获取所请求的对象状态
    POST改变当前对象状态
    PUT 创建对象
    DELETE 销毁对象

    概念:

    索引(相当数据库,包含行(代表文档)和列(字段)的表)、副本(用于控制查询性能及数据故障)、分片(每个分片就是一个Lucene索引)
    通用属性:
    index_name:该属性存储在索引中字段的名称,不指定默认为字段定义的对象名称
    index:该属性取值为analyzed或no,字符串也可以设置成not_analyzed,设置analyzed该字段被索引,可以被搜索,设置no该字段不能被搜索,字符串设置为not_analyzed该字段可以被搜索但是不分析,只能原样搜索。
    store:取值为no或yes,标注该字段是否存储原始值,即使没有指定原始值也可以通过_source返回
    boost:默认1,表示该字段在文档中的重要性,分数越高越重要
    null_value:表示该字段在文档中不存在时应写入何值
    include_in_all:该属性指定某字段是否包含到_all字段中
    字段类型:字符型、数值型、布尔型、二进制型、multi_field类型
    分词器:内置分词器(eg:standard、simple、keyword等)、自定义分词器
    模板:可应用到所有索引,存放到config/templates/目录下,模板之间可覆盖
    路由:routing参数(put数据时指定)、_routing字段(定义字段指定,相比routing参数要慢一些)
    别名:可以为一个索引或多个索引定义另一个名字,也支持过滤别名(支持filter指定数据用于别名)
    过滤器支持缓存 _cache参数
    搜索数据:简单查询、复合查询、排序、支持调用脚本config/scripts目录下
    支持数据类型:对象、数组、高亮、处理文件、自动补全、地址位置

    简单查询:

    通过URI请求查询

    GET /library/book/_search?q=title:crime&pretty=true

    term 查询 term查询不被解析,只能精确查询,可以指定多个索引、多个类型

    GET /library/book/_search?pretty=ture ' -d '

    {
     "query": {
       "term": {
         "title": {
           "value": "crime"
         }
       }
     }
    }
    

    分页和结果规模

    GET /library/_search?pretty=true '-d'

    {
    "from": 0,
    "size": 3,
    "query": {
     "term": {
       "title": {
         "value": "the"
       }
     }
    }
    }
    

    返回版本号

    GET /library/_search?pretty=true '-d'
    {
     "version": true,
     "query": {
       "term": {
         "title": {
           "value": "crime"
         }
       }
     }
    }
    

    限制结果分数,添加min_score设置最小分数,高于0.60的文档

    GET /library/_search?pretty=true '-d'

    {
    "min_score":0.60,
    "query": {
      "term": {
        "title": {
          "value": "crime"
        }
      }
    }
    }
    

    指定搜索位置

    GET /library/_search?preference=_local

    {
     "query": {
       "term": {
         "title": {
           "value": "crime"
         }
       }
     }
    }
    

    term查询 不被解析,匹配精确的词项,指定boost属性查询权重10倍

    GET library/_search?pretty

    {
     "query": {
       "term": {
         "title": {
           "value": "crime",
           "boost": 10
         }
       }
     }
    }
    

    terms查询,minimum属性设置为1,至少匹配一个词项,为2需同时包含2个词项

    GET library/_search?pretty

    {
     "query": {
       "terms": {
         "tags": [
           "novel",
           "book"
         ]
       }
     }
    }
    

    match查询,提取查询参数中给定的值,分析这些值,匹配包含crime and 或punishment的所有文档

    GET library/_search?pretty

    {
     "query": {
       "match": {
         "title": "Crime and punishment"
       }
     }
    }
    

    布尔match查询

    GET library/_search?pretty

    {
     "query": {
       "match": {
         "title":{
           "query": "crime and punishment"
           , "operator": "and"
         }
       }
     }
    }
    

    match_phrase 查询,与布尔区别是构造一个短语查询,slop查询短语中间隔几个未知单词算匹配成功

    GET library/_search?pretty

    {
     "query": {
       "match_phrase": {
         "title": {
           "query": "crime and punishment",
           "slop": 12
         }
       }
     }
    }
    

    match_phrase_prefix

    GET library/_search?pretty

    {
     "query": {
       "match_phrase_prefix": {
         "title": {
           "query": "crime and punishment",
           "slop": 1,
           "max_expansions": 10
         }
       }
     }
    }
    

    multi_macth查询,查询作用到多个字段上

    GET library/_search?pretty

    {
     "query": {
       "multi_match": {
         "query": "crime and punishment",
         "fields": ["title","otitle"]
       }
     }
    }
    

    query_string查询,支持lucene所有查询语法

    GET library/_search?pretty

    {
     "query": {
       "query_string": {
         "default_field": "title",
         "query": "title:crime^10 +title:punishment -otitle:cat"
       }
     }
    }
    

    GET library/_search?pretty

    {
     "query": {
       "query_string": {
         "fields": ["title","otitle"],
         "query": "crime punishment",
         "use_dis_max": true
       }
     }
    }
    

    ids 查询

    GET library/_search?pretty

    {
     "query": {
       "ids": {
         "values": ["10","11","12"]
       }
     }
    }
    

    prefix 查询,类似于term查询,类似与多term查询

    GET library/_search?pretty

    {
     "query": {
       "prefix": {
         "title": {
           "value": "cri"
         }
       }
     }
    }
    

    fuzz 查询基于模糊串,计算给定词项与文档的编辑距离来得到结果,该类查询对CPU资源消耗是昂贵的,对模糊匹配场景很实用

    GET library/_search?pretty

    {
     "query": {
       "fuzzy": {
         "title": "cirme"
       }
     }
    }
    

    match_all 查询匹配索引中所有文档的简单查询

    GET library/_search?pretty

    {
     "query": {
       "match_all": {}
     }
    }
    

    wildcard查询允许使用*和?通配符

    GET library/_search?pretty

    {
     "query": {
       "wildcard": {
         "title": {
           "value": "cr*e"
         }
       }
     }
    }
    

    range 查询

    GET library/_search?pretty

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

    ##########过滤器(不影响打分)##########

    range过滤器

    GET library/_search?pretty

    {
     "post_filter": {
       "range": {
         "year": {
           "gte": 1930,
           "lte": 1990
         }
       }
     }
    }
    

    exists过滤器 有指定字段的文档

    GET library/_search?pretty

    {
     "post_filter": {
       "exists": {
         "field": "year"
       }
     }
    }
    

    script过滤器(error)

    GET library/_search?pretty

    {
     "post_filter": {
       "script": {
         "script":"now - doc['year'].value >100"
         , "params": {
           "now":2019
         }
       }
     }
    }
    

    limit过滤器,限制每个分片返回文档数目(error)

    GET library/_search?pretty

    {
     "post_filter": {
       "limit": {
         "value": 1
       }
     }
    }
    

    ids过滤器 得到标识符为2个文档

    GET library/_search?pretty

    {
     "post_filter": {
       "ids": {
         "type": ["book"],
         "values": [
           "2"
         ]
       }
     }
    }
    

    过滤器组合 bool、and、or和not过滤器(error,重点在搞一下)

    GET library/_search?pretty

    {
     "post_filter": {
       "not": {
         "and":[{
           "term":{
             "title":"crime"
           }
         },
         {
           "or":[
             {
               "range":{
                 "year": {
                    "gte": 1930,
                    "lte": 1990
                   }
               }
             },{
               "term":{
                 "available":true
               }
             }
             ]
         }]
       }
     }
    }
    

    ############组合查询############

    bool查询

    should 可以匹配也可以不匹配

    must 必须在返回的文档上匹配上

    must_not 不能在返回的文档上匹配上

    GET library/_search?pretty

    {
     "query": {
       "bool": {
         "must": [
           {"term": {
             "title": {
               "value": "crime"
             }
           }}
         ],
         "should": [
           {
             "range": {
               "year": {
                 "gte": 1900,
                 "lte": 2000
               }
             }
           }
         ],
         "must_not": [
           {
             "term": {
               "otitle": {
                 "value": "nothing"
               }
             }
           }
         ]
       }
     }
    }
    

    constant_score 查询,该查询用于封装另一个查询(过滤器),返回的每个文档都得到一个恒定值

    GET library/_search?pretty

    {
     "query": {
       "constant_score": {
           "query": {
             "term": {
               "title": {
                 "value": "crime"
               }
             }
           },
         "boost": 1.2
       }
     }
    }
    

    indices查询,支持在多个索引中查询

    ##########数据排序##########

    默认排序

    GET library/_search?pretty

    {
     "query": {
       "terms": {
         "title": [
           "crime",
           "front",
           "punishment"
         ]
       }
     }
     , "sort": [
       {
         "_score": {
           "order": "asc"
         }
       }
     ]
    }
    

    error

    POST library/book/ '-d'

    {
     
     "title":{
       "type":"multi_field",
       "fields":{
         "title":{"type":"text"},
         "sort":{"type":"text","index":"not_analyzed"}
       }
     }
    }
    #高亮,默认<em></em>
    GET library/_search?pretty
    {
     "query": {
       "term": {
         "title": {
           "value": "crime"
         }
       }
     }
     , "highlight": {
       "pre_tags": ["<b>"],
       "post_tags": ["</b>"],
       "fields": {
         "title": {}
       }
     }
    }
    

    GET library/_search?pretty

    {
     "query": {
       "term": {
         "title": {
           "value": "crime"
         }
       }
     }
     , "highlight": {
       
       "fields": {
         "title": {"pre_tags": ["<b>"],"post_tags": ["</b>"]}
       }
     }
    }
    

    GET library/_search?pretty

    {
     "query": {
       "constant_score": {
         "filter": {
           "query_string": {
             "query": "available:false author:heller"
           }
         },
         "boost": 5
       }
     }
    }
    

    GET /library/_search

    {
     "query": {
       "match_all": {}
     }
    }
    

    添加属性字段

    PUT /library/book/_mapping

    {
     "properties": {
       "name":{"type": "text","store": true,"index": true}
     }
    }
    

    创建嵌套文档

    PUT /library/book/_mapping

    {
     "properties": {
       "variation":{
         "type": "nested",
         "properties": {
           "size":{"type": "text","store": true,"index": true},
           "color":{"type": "text","store": true,"index": true}
         }
       }
     }
    }
    

    PUT /library/book/6

    {
     "title":"The Book",
     "author":"Test author",
     "name":" the Sorec ",
     "variation":[
       {"size":"xxl","color":"red"},
       {"size":"xxxl","color":"green"}
       ]
    }
    

    GET /library/book/_search/

    {
     "query": {
       "nested": {
         "path": "variation",
         "query": {
           "bool": {
             "must": [
               {"term": {"variation.size": "xxl"}},
               {"term": {"variation.color": "red"}}
             ]
           }
         }
       }
     }
    }
    

    相关文章

      网友评论

          本文标题:ElasticSearch Server 扩展的弹性搜索解决方案

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