2016-10-19 5 views
0

GolangのElasticSearchのラッパーであるgoライブラリ(https://github.com/OwnLocal/goes)を使用しています。 ElasticSearchクエリでGolang:Goesと呼ばれるElasticSearchライブラリを使用すると、どのようにしてboolの実行可能コードを記述できますか?

、我々は次のように実行することができます。

{ 
    "query": { 
    "match": { 
     "user_id_1": "438018" 
    } 
    } 
} 

、それが動作します。行く使っgolangについては

、あなたにのようにそれを実行することができます:ここでは

var query = map[string]interface{}{ 
     "query": map[string]interface{}{ 
      "match": map[string]interface{}{ 
       "user_id_1": "438018", 
      }, 
     }, 
    } 

は私の質問で、あなたは上記のコードでelasticsearch

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "year": "2016" 
      } 
     }, 
     { 
      "match": { 
      "frequency": "7" 
      } 
     } 
     ] 
    } 
    } 
} 

でこのクエリを使用することができ、それがありますここで文書に書かれているbool should節(https://www.elastic.co/guide/en/elasticsearch/reference/current/_executing_searches.html
私はquery2をelastic1と同じ方法で検索するようにしました。

var query2 = map[string]interface{}{ 
     "query": map[string]interface{}{ 
      "bool": map[string]interface{}{ 
       "should": map[string]interface{}{ 
        "match": map[string]interface{}{ 
         "year": "2016", 
        }, 
        "match": map[string]interface{}{ 
         "frequency": "7", 
        }, 
       }, 
      }, 
     }, 
    } 

エラー:私はgolang上のインターフェイスを持つので、慣れていないよ

リテラルマップ内の重複したキー "一致"。
私はいくつか考えていることを願っています。ありがとう。

p.s.

ありがとうTranvu Xuannhat :)それは多くの助けになりました!

var query2 = map[string]interface{}{ 
     "query": map[string]interface{}{ 
      "bool": map[string]interface{}{ 
       "should": []map[string]interface{}{ 
        map[string]interface{}{ 
         "match": map[string]interface{}{ 
           "year": "2016", 
          }, 
        }, 
        map[string]interface{}{ 
         "match": map[string]interface{}{ 
           "frequency": "7", 
          }, 
        }, 
       }, 
      }, 
     }, 
    } 

これは私が最後にしたものです。

答えて

0

以前はGolangでElasticSearchを行っていませんでしたが、元のクエリとGoクエリの不一致があります。マップの配列でなければならず、各マップにはキー "一致"があります。重複した「一致」(エラーとして)の地図ではありません Golangのクエリでは、次のようになります:

"should":[]map[string]interface{} { 
     {  
       "match": map[string]interface{}{ 
        "year": "2016", 
       }, 
     }, 
     { 
       "match": map[string]interface{}{ 
        "frequency": "7", 
       }, 
     }, 
    }, 
関連する問題