如何在NEST中为内部数组创建MoreLikeThis查询?

时间:2016-07-24 19:49:33

标签: c# elasticsearch nest elasticsearch-net

我想为这个json查询创建NEST等效项:

{
    "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"]
                    }]
                }
            }]

1 个答案:

答案 0 :(得分: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")))));

希望它有所帮助。