
查询流程总体可以分为以下几个部分
对于客户端发过来的search请求,最终会在RestSearchAction#prepareRequest方法中处理
经过层层封装,会调用NodeClient#executeLocally方法
之后会执行TransportAction#execute方法
最后会调用TransportSearchAction#doExecute方法
TransportSearchAction#doExecute方法
执行executeSearch方法
执行搜索方法searchAsyncAction()start()
这里只分析QUERY_THEN_FETCH这个type类型,最终会调用InitialSearchPhase的run方法,该方法会执行每一个shard请求
调用performPhaseOnShard方法执行shard请求
会调用TransportInterceptor#sendRequest方法发送请求
调用onShardResult收集成功结果
onShardSuccess对所有结果进行收集
successfulShardExecution是否所有请求都已收到回复,都收到之后进行下一阶段
onPhaseDone()会调用AbstractSearchAsyncAction#executeNextPhase方法
FetchSearchPhase继承了SearchPhase类,所以最终会调用FetchSearchPhase#run方法
innerRun()方法
executeFetch方法会处理成功或失败的请求,executeFetch的参数querySearchResult中包含分页信息,最后定义一个Listener,每成功获取一个shard数据后就执行counteronResult,调用对结果的处理回调,把result保存到数组中,然后执行countDown
onResult方法
当所有shard数据收集完毕后,countDown会执行finishPhase,最终会触发ExpandSearchPhase
取回所有数据之后,执行ExpandSearchPhase#方法
通过sendResponsePhase方法返回给客户端
对于所有的Query和Fetch过程的入口函数在SearchTransportService#registerRequestHandler
查询入口函数是searchServiceexecuteQueryPhase,查询是会优先差是否有缓存,如果有缓存,就查缓存
loadOrExecuteQueryPhase有缓存从缓存加载数据,判断indexrequestscacheenable是否为true(默认为true),来判断是否有缓存。这个cache由节点的所有分片共享,空间满的时候删除最近最少使用的数据,cache并不缓存全部搜索结果
queryPhaseexecute查询方法
慢 *** 作Query日志的统计时间在于本阶段的处理时间
searchasp
<form name="sch" action="showaspact=search" method=post>
<input type="text" name="num" size="200">
<input type="text" name="mc" size="200">
<input type="submit" name="ok">
</form>
showasp
<!--#include file="connasp" -->
<%
if request("act")<>"" then
sql="select from shuju where 1=1"
if resquest("num")<>"" then
sql=sql&" and xm_num='"&request("num")&"'" '假设xm_num的数据类型为文本
end if
if resquest("mc")<>"" then
sql=sql&" and xm_xmmc like '%"&request("mc")&"%'"
end if
set rs=servercreateobject("adodbrecordset")
rsopen sql,conn,1,1
if rseof then
responsewrite "没有相匹配的查询记录!"
else
do while not rseof
'显示数据,代码自己写吧。
loop
end if
esle
responsewrite "非法参数"
end if
%>
print(responsecss('divproject-list a::attr(href)')extract())
以这一行代码为例,尝试将选择器中的内容,空格部分替换成“”试试,替换后的代码如下:
print(responsecss('divproject-lista::attr(href)')extract())
如果标签就是 a 标签,那么就需要修改展示方式,因为选择器最终输出的都是列表,所以这里需要将列表中的第一个元素进行展示,代码改为:
print(responsecss('divproject-list a::attr(href)')extract()[0])
java查询elasticsearch 有哪些索引
次查询可分为下面四个步骤:
1创建连接ElasticSearch服务的client
索引在ElasticSearch服务器上,进行索引的查询首先要和服务器创建连接,这是第一步。
<code>Client client = TransportClientbuilder()build()
addTransportAddress(new InetSocketTransportAddress(InetAddressgetByName("127001"), 9300));
</code>
2创建QueryBuilder
QueryBuilder可以设置单个字段的查询,也可以设置多个字段的查询
eg1: 查询title字段中包含hibernate关键字的文档:
<code>QueryBuilder qb1 = termQuery("title", "hibernate");
</code>
eg2: 查询title字段或content字段中包含git关键字的文档:
<code>QueryBuilder qb2= QueryBuildersmultiMatchQuery("git", "title","content");
</code>
3执行查询
通过client设置查询的index、type、query返回一个SearchResponse对象:
<code>SearchResponse response = clientprepareSearch("blog")setTypes("article")setQuery(qb2)execute()
actionGet();
</code>
4处理查询结果
SearchResponse对象的getHits()方法获取查询结果,返回一个SearchHits的集合,遍历集合获取查询的文档信息:
1
2
<code>SearchHits hits = responsegetHits();
</code>
1、首先我们来创建一个类名为OutServlet的类,接下来让它继承>
2、然后我们在webxml配置OutServlet的相关的信息,比如类的全路径和访问路径。
3、接下来我们在OutServlet的doGet方法中利用response对象调用getOutputStream()获取一个OutputStream的对象。然后我们来调用OutpuStream对象的write()方法输出一个字节数组,这个字节数组由中文字符串转化得来。
4、利用OutputStream这种方式输出中文有可能产生乱码。注意是有可能,而不是一定产生乱码。
5、为了让它实现无论用什么浏览器都不会乱码,我们来设置浏览器打开这个文件的编码方式;然后设置文件的编码方式。让两者的编码方式一致,它就不会乱码了。
以上就是关于jquery ajax 请求处理后Response.Write的数据怎么获取全部的内容,包括:jquery ajax 请求处理后Response.Write的数据怎么获取、android responsebody 怎么获取数据、Elasticsearch基础概念之查询流程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)