学习课程连接《Elasticsearch核心技术与实战》java
<br/> ## URI Search 使用HTTP的GET方法,在URL中使用查询参数进行查询。 ``` GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s { "profile":"true" } ``` * `q`指定查询语句,使用`Query String Syntax` * `df`默认字段,若不指定,会对全部字段进行查询 * `sort`用于排序 * `from`、`size`用于分页 * `profile`用于展现查询是如何被执行的node
#基本查询 GET /movies/_search?q=2012&df=title&sort=year:desc&from=0&size=10&timeout=1s
#基本查询返回结果 { "took" : 50, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : null, "hits" : [ { "_index" : "movies", "_type" : "_doc", "_id" : "105254", "_score" : null, "_source" : { "id" : "105254", "genre" : [ "Adventure", "Comedy" ], "title" : "Crystal Fairy & the Magical Cactus and 2012", "year" : 2013, "@version" : "1" }, "sort" : [ 2013 ] }, { "_index" : "movies", "_type" : "_doc", "_id" : "72378", "_score" : null, "_source" : { "id" : "72378", "genre" : [ "Action", "Drama", "Sci-Fi", "Thriller" ], "title" : "2012", "year" : 2009, "@version" : "1" }, "sort" : [ 2009 ] } ] } }
#带profile GET /movies/_search?q=2012&df=title { "profile":"true" } #指定字段q=title:2012等价于q=2012&df=title GET /movies/_search?q=title:2012&sort=year:desc&from=0&size=10&timeout=1s { "profile":"true" }
#带profile返回结果 { "took" : 14, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 11.303033, "hits" : [ { "_index" : "movies", "_type" : "_doc", "_id" : "72378", "_score" : 11.303033, "_source" : { "id" : "72378", "genre" : [ "Action", "Drama", "Sci-Fi", "Thriller" ], "title" : "2012",#只查询title中的2012 "year" : 2009, "@version" : "1" } }, { "_index" : "movies", "_type" : "_doc", "_id" : "105254", "_score" : 5.2497, "_source" : { "id" : "105254", "genre" : [ "Adventure", "Comedy" ], "title" : "Crystal Fairy & the Magical Cactus and 2012", "year" : 2013, "@version" : "1" } } ] }, "profile" : { "shards" : [ { "id" : "[u-4S1mfbQiuA1Bqe-wfPJQ][movies][0]", "searches" : [ { "query" : [ { "type" : "TermQuery", "description" : "title:2012", "time_in_nanos" : 1105745, "breakdown" : { "set_min_competitive_score_count" : 0, "match_count" : 0, "shallow_advance_count" : 0, "set_min_competitive_score" : 0, "next_doc" : 7966, "match" : 0, "next_doc_count" : 4, "score_count" : 2, "compute_max_score_count" : 0, "compute_max_score" : 0, "advance" : 0, "advance_count" : 0, "score" : 133876, "build_scorer_count" : 9, "create_weight" : 187971, "shallow_advance" : 0, "create_weight_count" : 1, "build_scorer" : 775916 } } ], "rewrite_time" : 4990, "collector" : [ { "name" : "CancellableCollector", "reason" : "search_cancelled", "time_in_nanos" : 574426, "children" : [ { "name" : "SimpleTopScoreDocCollector", "reason" : "search_top_hits", "time_in_nanos" : 158099 } ] } ] } ], "aggregations" : [ ] } ] } }
#泛查询,正对_all,全部字段,查询全部字段中的2012 GET /movies/_search?q=2012 { "profile":"true" }
#使用引号,Phrase查询,还要求先后顺序保持一致,"Beautiful Mind"等效于Beautiful AND Mind GET /movies/_search?q=title:"Beautiful Mind" { "profile":"true" }
#Phrase查询返回结果 { "took" : 16, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 13.68748, "hits" : [ { "_index" : "movies", "_type" : "_doc", "_id" : "4995", "_score" : 13.68748, "_source" : { "id" : "4995", "genre" : [ "Drama", "Romance" ], "title" : "Beautiful Mind, A", #查询条件 "year" : 2001, "@version" : "1" } } ] }, "profile" : { "shards" : [ { "id" : "[u-4S1mfbQiuA1Bqe-wfPJQ][movies][0]", "searches" : [ { "query" : [ { "type" : "PhraseQuery", #查询类型为PhraseQuery "description" : """title:"beautiful mind"""", "time_in_nanos" : 10670089, "breakdown" : { "set_min_competitive_score_count" : 0, "match_count" : 1, "shallow_advance_count" : 0, "set_min_competitive_score" : 0, "next_doc" : 28250, "match" : 27343, "next_doc_count" : 3, "score_count" : 1, "compute_max_score_count" : 0, "compute_max_score" : 0, "advance" : 0, "advance_count" : 0, "score" : 9171, "build_scorer_count" : 9, "create_weight" : 7583491, "shallow_advance" : 0, "create_weight_count" : 1, "build_scorer" : 3021819 } } ], "rewrite_time" : 7818, "collector" : [ { "name" : "CancellableCollector", "reason" : "search_cancelled", "time_in_nanos" : 39950, "children" : [ { "name" : "SimpleTopScoreDocCollector", "reason" : "search_top_hits", "time_in_nanos" : 25137 } ] } ] } ], "aggregations" : [ ] } ] } }
# Term查询为泛查询,(Beautiful Mind)等效于Beautiful OR Mind GET /movies/_search?q=title:(Beautiful Mind) { "profile":"true" }
{ "took" : 10, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 20, "relation" : "eq" }, "max_score" : 13.687479, "hits" : [ { "_index" : "movies", "_type" : "_doc", "_id" : "4995", "_score" : 13.687479, "_source" : { "id" : "4995", "genre" : [ "Drama", "Romance" ], "title" : "Beautiful Mind, A", "year" : 2001, "@version" : "1" } }, { "_index" : "movies", "_type" : "_doc", "_id" : "3912", "_score" : 8.723258, "_source" : { "id" : "3912", "genre" : [ "Comedy", "Drama" ], "title" : "Beautiful", "year" : 2000, "@version" : "1" } }, { "_index" : "movies", "_type" : "_doc", "_id" : "47404", "_score" : 8.576847, "_source" : { "id" : "47404", "genre" : [ "Adventure", "Animation", "Comedy", "Fantasy", "Romance", "Sci-Fi" ], "title" : "Mind Game", "year" : 2004, "@version" : "1" } }, { "_index" : "movies", "_type" : "_doc", "_id" : "1046", "_score" : 7.317063, "_source" : { "id" : "1046", "genre" : [ "Drama", "Romance" ], "title" : "Beautiful Thing", "year" : 1996, "@version" : "1" } }, { "_index" : "movies", "_type" : "_doc", "_id" : "3302", "_score" : 7.317063, "_source" : { "id" : "3302", "genre" : [ "Comedy" ], "title" : "Beautiful People", "year" : 1999, "@version" : "1" } }, { "_index" : "movies", "_type" : "_doc", "_id" : "4242", "_score" : 7.317063, "_source" : { "id" : "4242", "genre" : [ "Comedy", "Crime", "Drama", "Thriller" ], "title" : "Beautiful Creatures", "year" : 2000, "@version" : "1" } }, { "_index" : "movies", "_type" : "_doc", "_id" : "4372", "_score" : 7.317063, "_source" : { "id" : "4372", "genre" : [ "Drama", "Romance" ], "title" : "Crazy/Beautiful", "year" : 2001, "@version" : "1" } }, { "_index" : "movies", "_type" : "_doc", "_id" : "94", "_score" : 7.317063, "_source" : { "id" : "94", "genre" : [ "Comedy", "Drama", "Romance" ], "title" : "Beautiful Girls", "year" : 1996, "@version" : "1" } }, { "_index" : "movies", "_type" : "_doc", "_id" : "90353", "_score" : 7.317063, "_source" : { "id" : "90353", "genre" : [ "Drama" ], "title" : "Beautiful Boy", "year" : 2010, "@version" : "1" } }, { "_index" : "movies", "_type" : "_doc", "_id" : "100487", "_score" : 7.317063, "_source" : { "id" : "100487", "genre" : [ "Drama", "Fantasy", "Romance" ], "title" : "Beautiful Creatures", "year" : 2013, "@version" : "1" } } ] }, "profile" : { "shards" : [ { "id" : "[u-4S1mfbQiuA1Bqe-wfPJQ][movies][0]", "searches" : [ { "query" : [ { "type" : "BooleanQuery", "description" : "title:beautiful title:mind", "time_in_nanos" : 963305, "breakdown" : { "set_min_competitive_score_count" : 0, "match_count" : 6, "shallow_advance_count" : 0, "set_min_competitive_score" : 0, "next_doc" : 133259, "match" : 2086, "next_doc_count" : 27, "score_count" : 20, "compute_max_score_count" : 0, "compute_max_score" : 0, "advance" : 0, "advance_count" : 0, "score" : 32590, "build_scorer_count" : 14, "create_weight" : 401324, "shallow_advance" : 0, "create_weight_count" : 1, "build_scorer" : 393978 }, "children" : [ { "type" : "TermQuery", "description" : "title:beautiful", "time_in_nanos" : 492649, "breakdown" : { "set_min_competitive_score_count" : 0, "match_count" : 0, "shallow_advance_count" : 6, "set_min_competitive_score" : 0, "next_doc" : 49055, "match" : 0, "next_doc_count" : 15, "score_count" : 16, "compute_max_score_count" : 6, "compute_max_score" : 85498, "advance" : 6172, "advance_count" : 6, "score" : 20213, "build_scorer_count" : 17, "create_weight" : 255976, "shallow_advance" : 4730, "create_weight_count" : 1, "build_scorer" : 70938 } }, { "type" : "TermQuery", "description" : "title:mind", "time_in_nanos" : 187326, "breakdown" : { "set_min_competitive_score_count" : 0, "match_count" : 0, "shallow_advance_count" : 6, "set_min_competitive_score" : 0, "next_doc" : 2447, "match" : 0, "next_doc_count" : 4, "score_count" : 5, "compute_max_score_count" : 6, "compute_max_score" : 11373, "advance" : 4506, "advance_count" : 5, "score" : 5483, "build_scorer_count" : 15, "create_weight" : 120204, "shallow_advance" : 3324, "create_weight_count" : 1, "build_scorer" : 39947 } } ] } ], "rewrite_time" : 16452, "collector" : [ { "name" : "CancellableCollector", "reason" : "search_cancelled", "time_in_nanos" : 85953, "children" : [ { "name" : "SimpleTopScoreDocCollector", "reason" : "search_top_hits", "time_in_nanos" : 60755 } ] } ] } ], "aggregations" : [ ] } ] } }
#布尔操做符 # 必须包括Beautiful 和 Mind GET /movies/_search?q=title:(Beautiful AND Mind) { "profile":"true" } # 必须包括Beautiful 但不能包括 Mind GET /movies/_search?q=title:(Beautiful NOT Mind) { "profile":"true" } #‘%2B’即为‘+’号表示必须包括包括 Mind GET /movies/_search?q=title:(Beautiful %2BMind) { "profile":"true" } #范围查询 ,区间写法年份在2002~2018 GET /movies/_search?q=title:beautiful AND year:[2002 TO 2018] { "profile":"true" } #通配符查询 GET /movies/_search?q=title:b* { "profile":"true" } #模糊匹配&近似度匹配 GET /movies/_search?q=title:beautifl~1 { "profile":"true" } GET /movies/_search?q=title:"Lord Rings"~2 { "profile":"true" }
<br/> ## Request Body Search 使用Elasticsearch提供的,基于JSON格式的更加完备的Query Domain Specific Language (DSL)golang
#query查询 #ignore_unavailable=true,能够忽略尝试访问不存在的索引“404_idx”致使的报错 POST /movies,404_idx/_search?ignore_unavailable=true { "profile": true, "query": { "match_all": {} } } #查询movies分页 POST /movies/_search { "from":10, "size":20, "query":{ "match_all": {} } } #对日期排序 POST kibana_sample_data_ecommerce/_search { "sort":[{"order_date":"desc"}], "query":{ "match_all": {} } } #_source 过滤显示的字段 POST kibana_sample_data_ecommerce/_search { "_source":["order_date"],#返回结果只显示"order_date" "query":{ "match_all": {} } } #脚本字段 GET kibana_sample_data_ecommerce/_search { "script_fields": { "new_field": { "script": { "lang": "painless", "source": "doc['order_date'].value+'hello'" } } }, "query": { "match_all": {} } } #match查询,last OR christmas POST movies/_search { "query": { "match": { "title": "last christmas" } } } #match查询,last AND christmas POST movies/_search { "query": { "match": { "title": { "query": "last christmas", "operator": "and" } } } } #match_phrase查询,one AND love,且顺序不能乱 POST movies/_search { "query": { "match_phrase": { "title":{ "query": "one love"#不能够查出 "title" : "One I Love, The", } } } } #match_phrase查询,slop在one love中间插入指定数量单词 POST movies/_search { "query": { "match_phrase": { "title":{ "query": "one love",#能够查出 "title" : "One I Love, The", "slop": 1 } } } }
PUT /users/_doc/1 { "name":"Ruan Yiming", "about":"java, golang, node, swift, elasticsearch" } PUT /users/_doc/2 { "name":"Li Yiming", "about":"Hadoop" } #query_string查询 POST users/_search { "query": { "query_string": { "default_field": "name", "query": "Ruan AND Yiming" } } } #query_string查询 POST users/_search { "query": { "query_string": { "fields":["name","about"], "query": "(Ruan AND Yiming) OR (Java AND Elasticsearch)" } } } #Simple Query 相似query_string查询,但会忽略错误的语法,同时只支持部分查询语法;默认的operator是 Or,能够指定;不支持AND OR NOT,会当字符串处理;支持部分逻辑+替代AND,|替代OR,-替代NOT POST users/_search { "query": { "simple_query_string": { "query": "Ruan AND Yiming", "fields": ["name"] } } } #Simple Query POST users/_search { "query": { "simple_query_string": { "query": "Ruan Yiming", "fields": ["name"], "default_operator": "AND" } } } GET /movies/_search { "profile": true, "query":{ "query_string":{ "default_field": "title", "query": "Beafiful AND Mind" } } } # 多fields GET /movies/_search { "profile": true, "query":{ "query_string":{ "fields":[ "title", "year" ], "query": "2012" } } } GET /movies/_search { "profile":true, "query":{ "simple_query_string":{ "query":"Beautiful +mind", "fields":["title"] } } }