zoukankan      html  css  js  c++  java
  • Elasticsearch学习(二)————搜索

    Elasticsearch
    1.query string search
    1.1.搜索全部
    // 1.
    GET http://ip:9200/test/test/_search
    结果:
    {
    "took": 86, # 耗费的时间:ms
    "timed_out": false, # 是否超时
    "_shards": { # 数据存储在5个主分片上
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
    },
    "hits": { # 匹配结果
    "total": 3, # 查询到三个document
    "max_score": 1, # 相关度的匹配分数:分数越高越相关
    "hits": [
    {
    "_index": "test", # 索引 index
    "_type": "test", # type
    "_id": "2", # id:唯一
    "_score": 1, # 相关度的匹配分数:分数越高越相关
    "_source": { # 存储的json数据
    "first_name": "小翠", # field
    "last_name": "cuicui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "1",
    "_score": 1,
    "_source": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 25,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "AWrVpGsO0WDJvaOeQOjd",
    "_score": 1,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    }
    ]
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    1.2.以about字段中含有climbing字符查询并根据age字段降序排列 可以多个排序,用逗号分隔:
    // 2.
    GET http://ip:9200/test/test/_search?q=about:climbing&sort=age:desc,price:desc
    GET http://ip:9200/test/test/_search?q=about:climbing&sort=age:desc
    {
    "took": 10,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
    },
    "hits": {
    "total": 3,
    "max_score": null,
    "hits": [
    {
    "_index": "test",
    "_type": "test",
    "_id": "1",
    "_score": null,
    "_source": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 25,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "sort": [ #排序字段的值
    25
    ]
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "2",
    "_score": null,
    "_source": {
    "first_name": "小翠",
    "last_name": "cuicui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "sort": [
    18
    ]
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "AWrVpGsO0WDJvaOeQOjd",
    "_score": null,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "sort": [
    18
    ]
    }
    ]
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    2.query DSL
    2.1.搜索全部
    // 1.
    POST http://ip:9200/test/test/_search
    语法:
    {
    "query":{
    "match_all":{}
    }
    }
    结果:
    {
    "took": 5,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
    },
    "hits": {
    "total": 5,
    "max_score": 1,
    "hits": [
    {
    "_index": "test",
    "_type": "test",
    "_id": "2",
    "_score": 1,
    "_source": {
    "first_name": "小翠",
    "last_name": "cuicui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "4",
    "_score": 1,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "price": 15000,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "1",
    "_score": 1,
    "_source": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 25,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "AWrVpGsO0WDJvaOeQOjd",
    "_score": 1,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "3",
    "_score": 1,
    "_source": {
    "first_name": "小雪",
    "last_name": "xiaoxue",
    "age": 20,
    "about": "climbing",
    "interests": [
    "dancing",
    "music"
    ]
    }
    }
    ]
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    2.2.以about字段中含有climbing字符查询并根据age字段降序排列 可以多个排序,用逗号分隔
    // 1.
    POST http://ip:9200/test/test/_search
    语法:
    {
    "query":{
    "match":{
    "about":"climbing"
    }
    },
    "sort":[
    {
    "age":"desc"
    }
    ]
    }

    结果:
    {
    "took": 115,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
    },
    "hits": {
    "total": 5,
    "max_score": null,
    "hits": [
    {
    "_index": "test",
    "_type": "test",
    "_id": "1",
    "_score": null,
    "_source": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 25,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "sort": [
    25
    ]
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "3",
    "_score": null,
    "_source": {
    "first_name": "小雪",
    "last_name": "xiaoxue",
    "age": 20,
    "about": "climbing",
    "interests": [
    "dancing",
    "music"
    ]
    },
    "sort": [
    20
    ]
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "2",
    "_score": null,
    "_source": {
    "first_name": "小翠",
    "last_name": "cuicui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "sort": [
    18
    ]
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "4",
    "_score": null,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "price": 15000,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "sort": [
    18
    ]
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "AWrVpGsO0WDJvaOeQOjd",
    "_score": null,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "sort": [
    18
    ]
    }
    ]
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    2.3. 分页数据
    // 1.
    POST http://ip:9200/test/test/_search
    语法:
    {
    "query":{
    "match_all":{} # 查询所有
    },
    "from":0, # 从第几条数据开始 0:第一条
    "size":1 # 展示几条数据
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    2.4.只展示指定的filed
    // 1.
    POST http://ip:9200/test/test/_search
    语法:
    {
    "query":{
    "match_all":{}
    },
    "_source":[
    "first_name",
    "age"
    ]
    }

    结果:
    {
    "took": 8,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
    },
    "hits": {
    "total": 5,
    "max_score": 1,
    "hits": [
    {
    "_index": "test",
    "_type": "test",
    "_id": "3",
    "_score": 1,
    "_source": {
    "first_name": "小雪",
    "age": 20
    }
    }
    ]
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    3.query filter
    3.1.多个查询条件:about字段必须包含"climbing";age大于20岁
    // 1.
    POST http://ip:9200/test/test/_search
    语法:
    {
    "query":{
    "bool":{
    "must":{
    "match":{
    "about":"climbing"
    }
    },
    "filter":{
    "range":{
    "age":{
    "gt":20
    }
    }
    }
    }
    }
    }

    结果
    {
    "took": 7,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
    },
    "hits": {
    "total": 1,
    "max_score": 0.26742277,
    "hits": [
    {
    "_index": "test",
    "_type": "test",
    "_id": "1",
    "_score": 0.26742277,
    "_source": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 25,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    }
    ]
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    3.2. 多个查询条件:must、 should、 must_not
    POST http://ip:9200/test/test/_search
    {
    "query":{
    "bool":{
    "must":{ # 必须匹配
    "match":{
    "first_name":"小翠"
    }
    },
    "should":{ # 可以匹配,也可以不匹配
    "match":{
    "last_name": "xue"
    }
    },
    "must_not":{ # 必须不匹配
    "match":{
    "last_name": "cui"
    }
    }
    }
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    4.full-test search
    4.1.全文检索
    // 1.
    POST http://ip:9200/test/test/_search
    语法:
    {
    "query":{
    "match":{
    "about":"go climbing"
    }
    }
    }
    分析:es将about这个filed拆解成每个词(term),建立倒排索引,每个term对应相应的document_id
    结果:
    {
    "took": 8,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
    },
    "hits": {
    "total": 7,
    "max_score": 0.7447149,
    "hits": [
    {
    "_index": "test",
    "_type": "test",
    "_id": "2",
    "_score": 0.7447149,
    "_source": {
    "first_name": "小翠",
    "last_name": "cuicui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "4",
    "_score": 0.7447149,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "price": 15000,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "1",
    "_score": 0.61562645,
    "_source": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 25,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "AWrVpGsO0WDJvaOeQOjd",
    "_score": 0.61562645,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "5",
    "_score": 0.2876821,
    "_source": {
    "first_name": "花花",
    "last_name": "huahau",
    "age": 16,
    "price": 20000,
    "about": "climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "7",
    "_score": 0.25759193,
    "_source": {
    "about": "go"
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "3",
    "_score": 0.25759193,
    "_source": {
    "first_name": "小雪",
    "last_name": "xiaoxue",
    "age": 20,
    "about": "climbing",
    "interests": [
    "dancing",
    "music"
    ]
    }
    }
    ]
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    4.2.短语搜索:匹配短语
    // 1.
    POST http://ip:9200/test/test/_search
    语法:
    {
    "query":{
    "match_phrase":{
    "about":"rock climbing"
    }
    }
    }

    结果:
    {
    "took": 20,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
    },
    "hits": {
    "total": 4,
    "max_score": 0.9748371,
    "hits": [
    {
    "_index": "test",
    "_type": "test",
    "_id": "1",
    "_score": 0.9748371,
    "_source": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 25,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "2",
    "_score": 0.7447149,
    "_source": {
    "first_name": "小翠",
    "last_name": "cuicui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "4",
    "_score": 0.7447149,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "price": 15000,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "AWrVpGsO0WDJvaOeQOjd",
    "_score": 0.6156264,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    }
    }
    ]
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    5.highlight search
    5.1.关键字高亮
    // 1.
    语法:
    {
    "query":{
    "match":{
    "about":"climbing" # 关键字
    }
    },
    "highlight":{
    "fields":{
    "about":{} # 字段
    }
    }
    }

    结果:
    {
    "took": 7,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
    },
    "hits": {
    "total": 6,
    "max_score": 0.48741856,
    "hits": [
    {
    "_index": "test",
    "_type": "test",
    "_id": "1",
    "_score": 0.48741856,
    "_source": {
    "first_name": "John",
    "last_name": "Smith",
    "age": 25,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "highlight": {
    "about": [
    "I love to go rock <em>climbing</em>" # <em> 标签html中高亮显示
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "2",
    "_score": 0.37235746,
    "_source": {
    "first_name": "小翠",
    "last_name": "cuicui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "highlight": {
    "about": [
    "I love to go rock <em>climbing</em>"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "4",
    "_score": 0.37235746,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "price": 15000,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "highlight": {
    "about": [
    "I love to go rock <em>climbing</em>"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "5",
    "_score": 0.2876821,
    "_source": {
    "first_name": "花花",
    "last_name": "huahau",
    "age": 16,
    "price": 20000,
    "about": "climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "highlight": {
    "about": [
    "<em>climbing</em>"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "3",
    "_score": 0.25759193,
    "_source": {
    "first_name": "小雪",
    "last_name": "xiaoxue",
    "age": 20,
    "about": "climbing",
    "interests": [
    "dancing",
    "music"
    ]
    },
    "highlight": {
    "about": [
    "<em>climbing</em>"
    ]
    }
    },
    {
    "_index": "test",
    "_type": "test",
    "_id": "AWrVpGsO0WDJvaOeQOjd",
    "_score": 0.12820786,
    "_source": {
    "first_name": "小翠",
    "last_name": "cui",
    "age": 18,
    "about": "I love to go rock climbing",
    "interests": [
    "sports",
    "music"
    ]
    },
    "highlight": {
    "about": [
    "I love to go rock <em>climbing</em>"
    ]
    }
    }
    ]
    }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160

    ---------------------

  • 相关阅读:
    菜鸟级别学习
    BootSrap学习
    将一正整数序列{K1,K2,...,K9}重新排列成一个新的序列。新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面)。
    按递增顺序依次列出所有分母为40,分子小于40的最简分数。
    对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串"(max)"。
    有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是友好的。
    创建一个带头结点的单链表,逆置链表,在单链表中删除值相同的多余结点,并遍历链表,删除链表最大节点。
    从键盘输入一个字符串,按照字符顺序从小到大进行选择排序,并要求删除重复的字符
    数组的逆置
    求亲密数
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11072403.html
Copyright © 2011-2022 走看看