2017-07-17 8 views
0

私はelasticsearch 5.5.0を使用しています。用語クエリの一部としてオブジェクトの配列を照会する方法

イム私のインデックスのように私は、弾性ルックスでJSONの型アトラクション一部のデータを持っている:

:クエリのようなルックスを生成

var query2 = Query<Attraction>.Bool(
      bq => bq.Filter(
       fq => fq.Terms(t => t.Field(f => f.Region).Terms(request.Region.ToLower())), 
       fq => fq.Terms(t => t.Field(f => f.Categories).Terms(request.Category.ToLower()))) 

:のように私の次のクエリは見え

"directions": "Exit the M4 at Junction 1", 
     "phoneNumber": "03333212001", 
     "website": "https://www.londoneye.com/", 
     "postCode": "SE1 7PB", 
     "categories": [ 
     { 
      "id": "ce4cf4d0-6ddd-49fd-a8fe-3cbf7be9b61d", 
      "name": "Theater" 
     }, 
     { 
      "id": "5fa1a3ce-fd5f-450f-92b7-2be6e3d0df90", 
      "name": "Family" 
     }, 
     { 
      "id": "ed492986-b8a7-43c3-be3d-b17c4055bfa0", 
      "name": "Outdoors" 
     } 
     ], 
     "genres": [], 
     "featuredImage": "https://www.daysoutguide.co.uk/media/1234/london-eye.jpg", 
     "images": [], 
     "region": "London", 

{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
      "terms": { 
      "region": [ 
       "london" 
      ] 
      } 
     }, 
     { 
      "terms": { 
      "categories": [ 
       "family" 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 

結果は返されません。もし私がカテゴリを取るビット私は結果を取得します。だから私はオブジェクトの配列であるカテゴリの用語フィルターをしようとしています。私はこのクエリを間違っているように見えます。どのようにこれを動作させるためのヒント?

よろしく

イスマイル

+1

フィールドのフルパスを指定したいと思う: 'categories.name'。それはうまくいくはずです。 – Slomo

+0

ネストされたクエリを使用する必要があります。[docs](https://www.elastic.co/guide/en/elasticsearch/client/net-api/5.x/nested-query-usage.html)で使用方法が見つかります。 。 – Rob

+0

rob、Nestクライアントでどうやってやっているのかわからないのですか?私はDSLのやり方を知っています – Ismail

答えて

2

あなたはまだ使って、強く型付けされたプロパティへのアクセスを使用することができます。

t.Field(f => f.Categories.First().Name)

NESTのプロパティ推定器を読者が.First()上で読み、categories.nameが得られるでしょう。

t.Field(f => f.Categories[0].Name)も同様です。

関連する問題