The Search API
2017-06-15 16:39
246 查看
现在 我们开始使用一些简单的搜索, 有两种基本的方式来运行搜索。 一个是通过发送搜索参数通过RSET请求URI, 另外的通过RESET 请求体发送。 请求body 方法允许你更加有表现力的,定义你的搜索是更加可读的JSON格式 我们尝试一个请求URI 方法的例子但是这个章节的剩余部分,我们会专门使用请求body 方法。 The REST API 用于搜索是可访问的从_search endpoint. 这个例子返回所有的文档在bank index. 让我们首先分析搜索调用,我们是搜索(_search endpoint) 在bankindex, q=* parameter 通知Elasticsearch 来匹配所有的文档在索引里 sort=account_number:asc 参数表明 排序 结果集使用account_number 字段 pretty 参数 告诉Elasticsearch 返回漂亮的JSON结果 GET /test/_search?q=*&sort=account_number:asc&pretty [elk@node01 api]$ curl -H "Content-Type: application/json" -XPOST 'http://192.168.137.2:9200/test/account/_bulk?pretty&refresh' --data-binary "@bb.json"(_search endpoint) { "took": 15, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 5, "max_score": null, "hits": [ { "_index": "test", "_type": "account", "_id": "1", "_score": null, "_source": { "account_number": 1, "balance": 39225, "firstname": "Amber", "lastname": "Duke", "age": 32, "gender": "M", "address": "880 Holmes Lane", "employer": "Pyrami", "email": "amberduke@pyrami.com", "city": "Brogan", "state": "IL" }, "sort": [ 1 ] }, { "_index": "test", "_type": "account", "_id": "6", "_score": null, "_source": { "account_number": 6, "balance": 5686, "firstname": "Hattie", "lastname": "Bond", "age": 36, "gender": "M", "address": "671 Bristol Street", "employer": "Netagy", "email": "hattiebond@netagy.com", "city": "Dante", "state": "TN" }, "sort": [ 6 ] }, { "_index": "test", "_type": "account", "_id": "13", "_score": null, "_source": { "account_number": 13, "balance": 32838, "firstname": "Nanette", "lastname": "Bates", "age": 28, "gender": "F", "address": "789 Madison Street", "employer": "Quility", "email": "nanettebates@quility.com", "city": "Nogal", "state": "VA" }, "sort": [ 13 ] }, { "_index": "test", "_type": "account", "_id": "18", "_score": null, "_source": { "account_number": 18, "balance": 4180, "firstname": "Dale", "lastname": "Adams", "age": 33, "gender": "M", "address": "467 Hutchinson Court", "employer": "Boink", "email": "daleadams@boink.com", "city": "Orick", "state": "MD" }, "sort": [ 18 ] }, { "_index": "test", "_type": "account", "_id": "20", "_score": null, "_source": { "account_number": 20, "balance": 16418, "firstname": "Elinor", "lastname": "Ratliff", "age": 36, "gender": "M", "address": "282 Kings Place", "employer": "Scentric", "email": "elinorratliff@scentric.com", "city": "Ribera", "state": "WA" }, "sort": [ 20 ] } ] } } GET /test/_search?q=Amber&sort=account_number:asc&pretty 至于响应,我们看几个部分: { "took": 20, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 2, "max_score": null, "hits": [ { "_index": "test", "_type": "account", "_id": "1", "_score": null, "_source": { "account_number": 1, "balance": 39225, "firstname": "Amber", "lastname": "Duke", "age": 32, "gender": "M", "address": "880 Holmes Lane", "employer": "Pyrami", "email": "amberduke@pyrami.com", "city": "Brogan", "state": "IL" }, "sort": [ 1 ] }, { "_index": "test", "_type": "account", "_id": "99", "_score": null, "_source": { "account_number": 99, "balance": 39225, "firstname": "Amber", "lastname": "Duke", "age": 32, "gender": "M", "address": "880 Holmes Lane", "employer": "Pyrami", "email": "amberduke@pyrami.com", "city": "Brogan", "state": "IL" }, "sort": [ 99 ] } ] } } 至于响应,我们看下面几个部分: 1.took: Elasticsearch 执行搜索单位毫秒 2.timed_out 告诉我们如果搜索是否超时 3._shards 告诉我们搜索分片的数量 下面是使用使用请求body 方法: GET /test/_search { "query": { "match_all": {} }, "sort": [ { "account_number": "asc" } ], "fields": [ "account_number", "firstname", "lastname" ] } { "took": 4, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 6, "max_score": null, "hits": [ { "_index": "test", "_type": "account", "_id": "1", "_score": null, "fields": { "account_number": [ 1 ], "firstname": [ "Amber" ], "lastname": [ "Duke" ] }, "sort": [ 1 ] }, { "_index": "test", "_type": "account", "_id": "6", "_score": null, "fields": { "account_number": [ 6 ], "firstname": [ "Hattie" ], "lastname": [ "Bond" ] }, "sort": [ 6 ] }, { "_index": "test", "_type": "account", "_id": "13", "_score": null, "fields": { "account_number": [ 13 ], "firstname": [ "Nanette" ], "lastname": [ "Bates" ] }, "sort": [ 13 ] }, { "_index": "test", "_type": "account", "_id": "18", "_score": null, "fields": { "account_number": [ 18 ], "firstname": [ "Dale" ], "lastname": [ "Adams" ] }, "sort": [ 18 ] }, { "_index": "test", "_type": "account", "_id": "20", "_score": null, "fields": { "account_number": [ 20 ], "firstname": [ "Elinor" ], "lastname": [ "Ratliff" ] }, "sort": [ 20 ] }, { "_index": "test", "_type": "account", "_id": "99", "_score": null, "fields": { "account_number": [ 99 ], "firstname": [ "Amber" ], "lastname": [ "Duke" ] }, "sort": [ 99 ] } ] } } 利用perl 实现: [elk@node01 api]$ cat a10.pl ##发送消息 use LWP::UserAgent; use LWP; use Encode; use LWP::Simple; use LWP::UserAgent; use HTTP::Cookies; use HTTP::Headers; use HTTP::Response; use Encode; use URI::Escape; use URI::URL; use JSON; use Data::Dumper; my $ua = LWP::UserAgent->new; $ua->agent("Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0"); my $cookie_jar = HTTP::Cookies->new( file=>'lwp_cookies.txt', autosave=>1, ignore_discard=>1); $ua->cookie_jar($cookie_jar); my $login_url ="http://192.168.137.2:9200/test/_search"; my $post ={ "query" => { "match_all" => {} }, "sort" => [ { "account_number" => "asc" } ], "fields" => [ "account_number", "firstname", "lastname" ] }; use JSON qw(encode_json); $json_string = encode_json($post); my $req = HTTP::Request->new( 'POST' => $login_url ); $req->content_type('application/json; charset=UTF-8') ; #post请求,如果有发送参数,必须要有这句 $req->content("$json_string"); #发送post的参数 my $res = $ua->request($req); print $res->content()."\n"; #获取的是响应正文 {"took":5,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":6,"max_score":null, "hits":[{"_index":"test","_type":"account","_id":"1","_score":null, "fields":{"account_number":[1],"firstname":["Amber"],"lastname":["Duke"]},"sort":[1]}, {"_index":"test","_type":"account","_id":"6","_score":null, "fields":{"account_number":[6],"firstname":["Hattie"],"lastname":["Bond"]},"sort":[6]}, {"_index":"test","_type":"account","_id":"13","_score":null, "fields":{"account_number":[13],"firstname":["Nanette"],"lastname":["Bates"]},"sort":[13]}, {"_index":"test","_type":"account","_id":"18","_score":null,"fields":{"account_number":[18], "firstname":["Dale"],"lastname":["Adams"]},"sort":[18]},{"_index":"test","_type":"account","_id":"20","_score":null, "fields":{"account_number":[20],"firstname":["Elinor"],"lastname":["Ratliff"]},"sort":[20]}, {"_index":"test","_type":"account","_id":"99","_score":null,"fields":{"account_number":[99], "firstname":["Amber"],"lastname":["Duke"]},"sort":[99]}]}} 不同的是 代替了q=* in the URI, 我们POST 一个JSON累心的查询请求体到_search API. 我们会讨论JSON 查询在下面一个章节。 重要的是了解一旦你得到搜索结果返回, Elasticsearch 是完成了请求 不在维护任何类型的服务端资源
相关文章推荐
- Marklogic search development -2.1 Understanding the Search API
- .NET Framework Solutions: In Search of the Lost Win32 API
- The implement of Binary Search Tree (JAVA)
- ZOJ 3674 Search in the Wiki(字典树 + map + vector)
- Elasticsearch java API (19)Percolate API
- 2010年7月19日_周一_Using the Common Data Source API in a Web application
- 利用Google Custom Search API抓取google搜索内容
- Asp.net mvc 3 file uploads using the fileapi
- Elasticsearch java API (23)查询 DSL Geo查询
- TST-Ternary Search Tree-Creating An English Dictionary for lookup and spell checking | CracktheInterview
- 2010年8月18日周三_insideTheAPI_overView_6.1
- the SDK platform-tools version(xxx) is too old to check APIs cimpiled with API xxx.
- mac下安装xdebug时报“The Zend Engine API version 2xxxxxxxx which is installed, is newer.”解决方法
- [ReadingNotes] Search the links, static final in the java
- ZOJ 3674 - Search in the Wiki
- 恢复XP的默认搜索方式 the standard Windows search companion (and the friendly dog)
- Eclipse -- An API baseline has not been set for the current workspace
- 调用其他服务器的api时,暂时处理跨域问题的方法——No 'Access-Control-Allow-Origin' header is present on the requested resour
- Creating a Build Definition using the TFS 2010 API
- 解决Azure Management API ForbiddenError: The server failed to authenticate the request