2017-01-12 17 views
0

UNIONとlimitを使用してクエリを作成したいと考えています。Elasticsearchでユニオンクエリを作成する方法は?

私はそのクエリをmysqlで説明することができます。

(SELECT 
    * 
FROM table 
WHERE type='text' 
LIMIT 3 
) 
UNION 
(SELECT 
    * 
FROM table 
WHERE type='word' 
LIMIT 3 
) 

Iは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 
} 

マッチクエリのみを使用すると効果があります。しかし、サイズでは、動作しません。

どうすれば解決できますか?どこへ行く

答えて

2

方法はMultiSearch

curl -XGET 'http://127.0.0.1:9200/indexname/_msearch' -d ' 
{} 
{"query" : {"term" : {"type" : "text"}}, "size" : 3} 
{} 
{"query" : {"term" : {"type" : "word"}}, "size" : 3} 
' 
+0

おかげで、それはカール上で動作です。しかし、それをURI検索にどのように使用するのですか? – USER

+0

@USERなぜURI検索でこれをやりたいのですか? –

+0

または、ajaxパラメータにどのように送信できますか? – USER

関連する問題