Поле подстановочного знака elasticsearch NEST

Есть ли способ, чтобы NEST поддерживал поля с подстановочными знаками. Например.

У меня есть такой класс:

public class SearchDocument
    {
        public string Id { get; set; }
        public string Symbol { get; set; }
        public IList<DisorderData> Disorders { get; set; }
     }

    public class DisorderData
    {
        public string Name { get; set; }
        public string Category { get; set; }
    }

Я мог бы легко структурировать запрос json следующим образом: (взято из: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html)

{
    "query_string" : {
        "fields" : ["disorders.*"],
        "query" : "cancer"
    }
}

Если я сделаю следующее в NEST:

            client.Search<SearchDocument>(x => x
                .Query(q => q
                    .QueryString(qs => qs
                        .OnFields(document => document.Disorders)
                        .Query("cancer"))));

он решает:

{
   "query_string" : {
       "fields" : ["disorders"],
    "query" : "cancer"
    }
}

Любые мысли о том, как получить подстановочный знак в поле?

Может быть, есть класс, который может преобразовать имя свойства в строку, а затем я могу объединить звездочку.


person Asher    schedule 30.10.2014    source источник


Ответы (1)


Вы можете использовать расширение Suffix, которое добавит . и заданную строку (в данном случае *) в конец поля:

client.Search<SearchDocument>(x => x
    .Query(q => q
        .QueryString(qs => qs
            .OnFields(document => document.Disorders.Suffix("*"))
            .Query("cancer"))));

Кроме того, имейте в виду, что всегда можно просто передать имя поля в виде строки вместо пути к объекту:

client.Search<SearchDocument>(x => x
    .Query(q => q
        .QueryString(qs => qs
            .OnFields(new string[] { "disorders.*" })
            .Query("cancer"))));
person Greg Marzouka    schedule 31.10.2014