2016-11-10 220 views
0

我正在寻找一种将多个查询传送到弹性搜索的方法。我的主要问题是,当我收到结果时,我希望能够知道哪个是产生结果的查询。在伪代码,我想这样做以下弹性搜索管道搜索查询

query1="James Bond" 
query2="Sean Connery" 
query3="Charlie Chaplin" 

pipeline=new ElasticSearchPipeline() 
pipeline.add(query1);pipeline.add(query2);pipeline.add(query3) 

pipeline.execute() 
jamesBondResults=pipeline.getResultsForQuery(query1) 
seanConneryResults=pipeline.getResultsForQuery(query2) 
charleChaplinResults=pipeline.getResultsForQuery(query3)  

的关键特征是,我想送避免ES服务器上发送多个请求的开销,但仍然能够处理结果,如果我已经逐个发送了这些查询。

回答

1

multi search API正是你要找的。

您可以发送许多查询和响应将包含在反馈以相同的顺序每个查询的数组:

curl -XPOST localhost:9200/_msearch -d ' 
{"index" : "test1"} 
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10} 
{"index" : "test2",} 
{"query" : {"match_all" : {}}} 
' 

上述多搜索查询的响应阵列将包含两个ES响应来自第一个和第二个查询的文档。