上篇的url基本参数来漏了一个内容,这篇文章从这个开始介绍起。
相信用过JQuery的童鞋应该都知道pretty format,ES同样也有这个功能。
当在请求的url后面附加?pretty=true时,返回的JSON将被格式化。另一个选项是设置format=yaml,这将导致结果以更可读的yaml格式返回。
好了,下面开始本文的正式内容:
结果过滤器
所有REST API都接受一个叫做filter_path的参数,该参数可用于减少ES返回的响应,从而减少在网络传输上消耗的时间和资源。这个参数采用逗号分隔的过滤器列表,用点符号表示:
GET http://localhost:9200/orders/_search?q=phone&filter_path=price,create_time
通过这个url请求那么最后就返回过滤后的两个字段,同样这个参数也接受通配符进行匹配。并且,可以通过两个通配符**可以用来包含字段,这样不需要知道字段的确切路径就能找出所有相关的数据。例如,我们可以通过这个请求返回每个片段:
GET http://localhost:9200/orders/_cluster/state?filter_path=routing_table.indices.**.state
多Index、多Type检索
从之前的介绍大家应该已经知道ES通过关键字q来接收关键字匹配查找,这里讲的多Index、多Type检索就是q的一种扩展。
ES允许我们搜索出现在所有索引或某些特定索引中的文档。例如,如果我们需要用包含good的名称搜索所有文档。
GET http://localhost:9200/_search?q = name:good
对于Type同样适用上面的方法:
Get http://localhost:9200/schools/_search?q = tags:good
URL检索:
ES强大的参数接受能力让我们的检索变得多种多样,甚至可以纯粹使用通过提供请求参数进行。在使用这种模式执行搜索时,并不是所有搜索选项都公开…
官方列出了很多参数,我指例举一些常用的:
1.analyzer:分析查询字符串时要使用的分析器名称(在对中文长句子进行分词时用到)
2.lenient:只需将此参数设置为true即可忽略基于格式的错误,默认情况下是false。
3.stored_fields:文档的可选择存储字段,以便在每次命中时返回,逗号分隔,不指定任何值将导致没有字段返回。
4.sort:排序。可以用一个单独的字段表示,也可以是字段:asc/字段:desc。字段可以是文档中的实际字段,也可以是特殊的_score名称,以指示基于分数的排序。
5.timeout:我们可以通过使用这个参数来限制搜索超时的时间,并且响应只包含指定时间内的命中。默认情况下,没有超时。
6.from:从命中Index开始的返回。默认值为0。
7.size:返回的数据条数。
8.search_type:要执行的搜索操作的类型。
到目前为止,我给大家介绍的搜索都是通过GET请求以URL参数的形式来进行,当然ES的强大不仅仅于此,它还可以通过post附加reuquest body进行检索,比如:
POST http://localhost:9200/goods/_search { "query":{ "query_string":{ "query":"phone" } } }
通过构造这样一个请求也同样能实现检索,而且更加强大,因为body的中的数据格式不再局限于rul中的寥寥数种,下篇文章将对这样的方式进行详细的介绍。
版权所属,如需转载,请注明出处:搜闲鱼