2016-07-24 6 views
1

나는이 JSON 쿼리에 대한 NEST 동등한를 만들려면 :NEST의 내부 배열에 대한 MoreLiThis 쿼리를 만드는 방법은 무엇입니까?

{ 
    "query": { 
     "more_like_this" : { 
      "fields" : ["storages.items"], 
      "like" : ["a","b"], 
      "min_term_freq": 1, 
      "min_doc_freq": 1 
     } 
    } 
} 

내 모델은 다음과 같습니다

public class Data 
{ 
    public string Name { get; set; } 

    public InnerStorage[] Storages { get; set; } 

} 

public class InnerStorage 
{ 
    public string[] Items { get; set; } 
} 

그리고 문제는 내가 MoreLikeThis 매개 변수에 문자열 배열을 전달하는 방법을 찾을 수 있다는 것입니다. 내가 만들 수 있습니다

LikeDescriptor가있는 경우에만

Text(string likeText) 

Document(Func<LikeDocumentDescriptor<T>, ILikeDocument> selector) 

만 요청

var data = 
     client.Search<Data>(
     x => 
      x.Query(
      q => 
       q.MoreLikeThis(
       s => 
        s.Fields(Field.Create("storages.items")) 
        .Like(sel => sel.Document(d => d.Document(
         new Data(){Storages =new[]{new InnerStorage(){Items = new[] {"a", "b"}}}} 
                 )))))); 

같은 그것은 전체 데이터 문서를 포함하고있다 (하지만 난 단지 전달하려는 문자열 (Items) 배열)을 찾고 잘못된 요청을 생성합니다.

,
"like": [{ 
       "_index": null, 
       "_type": "data", 
       "doc": { 
        "storages": [{ 
         "items": ["a", "b"] 
        }] 
       } 
      }] 
+0

NEST의 어떤 버전을 사용하십니까? – Rob

+0

@Rob NEST 2.4.1 – pil0t

답변

1

당신은이 예에서와 같이, 각 용어에 대한 유창 방법 Text를 호출하여 쿼리의 같은 부분에 더 많은 조건을 추가 할 수 있습니다

var searchResponse = client.Search<Document>(s => s 
    .Query(q => q 
     .MoreLikeThis(mlt => mlt 
      .Fields(f => f.Field(ff => ff.Title)) 
      .Like(l => l.Text("a").Text("b"))))); 

는 도움이되기를 바랍니다.

+0

예, 작동합니다. 감사합니다! – pil0t