2017-03-19 12 views
0

私はPythonライブラリでElasticsearchを使用していますが、オブジェクトが少し複雑になると検索クエリを使用する際に問題があります。Elasticsearch:JSONの配列を検索

{ 
    "id" : 120, 
    "name": bob, 
    "shared_status": { 
     "post_id": 123456789, 
     "text": "This is a sample", 
     "urls" : [ 
      { 
       "url": "http://test.1.com", 
       "displayed_url": "test.1.com" 
      }, 
      { 
       "url": "http://blabla.com", 
       "displayed_url": "blabla.com" 
      } 
     ] 
    } 
} 

は、今私は私にこの文書を返します。クエリを実行する場合にのみ表示されたURLの1がサブ「テスト」だとフィールドがある中で、「テキスト:私はオブジェクトが私のインデックスにそのように構築してい"と述べている。

{ 
    "query": { 
     "bool": { 
      "must": [ 
        {"exists": {"field": "text"}} 
        ] 
      } 
     } 
    } 
} 

しかし、私は一部のために追加するにはどのようなクエリを知らない:だから私はこのクエリをしたone of the displayed URL's a substring "test"

はそのposssibleですか?リストの反復はどのように機能しますか?

+0

ためmatch queryを使用することができます。 _mappingの出力を入力してください:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-get-mapping.html – Rahul

+0

質問は問い合わせelasticsearchについて私は簡素化JSON – mel

+0

@rahulrocに反復されていません状況は偽の例を使用していますが、私のアプリケーションはAPI twitterのつぶやきについてです。私のマッピングでは、これらのフィールドにマッピングが定義されていません。 – mel

答えて

2

あなたのスキーマの明示的なマッピングを定義していない場合は、elasticsearchは、入力されたデータに基づいて、デフォルトのマッピングを作成します。

  • urlsは、文字列型のものであろうと、あなたがurldisplayed_urlの間の任意の関連付けを必要としないとしてstandard analyzer

を使用すると、現在のスキーマが正常に動作します。タイプobject

  • displayed_urlのものであろう

    あなたはそれが可能であるフルテキスト一致

    GET _search 
    { 
        "query": { 
        "bool": { 
         "must": [ 
         { 
          "exists": { 
          "field": "text" 
          } 
         }, 
         { 
          "match": { 
          "urls.displayed_url": "test" 
          } 
         } 
         ] 
        } 
        } 
    } 
    
  • +0

    です。 – mel