如何在 Elasticsearch 上进行联合查询?
How to make union query on Elasticsearch?
我想用 UNION 和 limit 查询。
我可以在 mysql 上解释该查询。
(SELECT
*
FROM table
WHERE type='text'
LIMIT 3
)
UNION
(SELECT
*
FROM table
WHERE type='word'
LIMIT 3
)
我在 Elasticsearch 上试过了
{
"query":{
"dis_max":{
"queries":[
{
"from":0,
"size":3,
"query":{
"match":{
"type":"text"
}
}
},
{
"from":0,
"size":3,
"query":{
"match":{
"type":"word"
}
}
}
]
}
}
}
http://localhost:9200/test/table/_search?pretty&source={%22query%22:{%22dis_max%22:{%22queries%22:[{%22query%22:{%22match%22:{%22type%22 :%22test%22}}}]}}}
然后,就出现了错误。
{
"error" : {
"root_cause" : [ {
"type" : "query_parsing_exception",
"reason" : "[_na] query malformed, no field after start_object",
"index" : "test",
"line" : 1,
"col" : 34
} ],
"type" : "search_phase_execution_exception",
"reason" : "all shards failed",
"phase" : "query",
"grouped" : true,
"failed_shards" : [ {
"shard" : 0,
"index" : "test",
"node" : "U6yIqY-pS526Vz8QTi6d0Q",
"reason" : {
"type" : "query_parsing_exception",
"reason" : "[_na] query malformed, no field after start_object",
"index" : "test",
"line" : 1,
"col" : 34
}
} ]
},
"status" : 400
}
当我只使用匹配查询时,它起作用了。但是有了尺寸,就不行了。
我该如何解决?
要走的路是MultiSearch
curl -XGET 'http://127.0.0.1:9200/indexname/_msearch' -d '
{}
{"query" : {"term" : {"type" : "text"}}, "size" : 3}
{}
{"query" : {"term" : {"type" : "word"}}, "size" : 3}
'
我想用 UNION 和 limit 查询。
我可以在 mysql 上解释该查询。
(SELECT
*
FROM table
WHERE type='text'
LIMIT 3
)
UNION
(SELECT
*
FROM table
WHERE type='word'
LIMIT 3
)
我在 Elasticsearch 上试过了
{
"query":{
"dis_max":{
"queries":[
{
"from":0,
"size":3,
"query":{
"match":{
"type":"text"
}
}
},
{
"from":0,
"size":3,
"query":{
"match":{
"type":"word"
}
}
}
]
}
}
}
http://localhost:9200/test/table/_search?pretty&source={%22query%22:{%22dis_max%22:{%22queries%22:[{%22query%22:{%22match%22:{%22type%22 :%22test%22}}}]}}} 然后,就出现了错误。
{
"error" : {
"root_cause" : [ {
"type" : "query_parsing_exception",
"reason" : "[_na] query malformed, no field after start_object",
"index" : "test",
"line" : 1,
"col" : 34
} ],
"type" : "search_phase_execution_exception",
"reason" : "all shards failed",
"phase" : "query",
"grouped" : true,
"failed_shards" : [ {
"shard" : 0,
"index" : "test",
"node" : "U6yIqY-pS526Vz8QTi6d0Q",
"reason" : {
"type" : "query_parsing_exception",
"reason" : "[_na] query malformed, no field after start_object",
"index" : "test",
"line" : 1,
"col" : 34
}
} ]
},
"status" : 400
}
当我只使用匹配查询时,它起作用了。但是有了尺寸,就不行了。
我该如何解决?
要走的路是MultiSearch
curl -XGET 'http://127.0.0.1:9200/indexname/_msearch' -d '
{}
{"query" : {"term" : {"type" : "text"}}, "size" : 3}
{}
{"query" : {"term" : {"type" : "word"}}, "size" : 3}
'