Получить данные из результатов поиска elastics

Я пишу метод, который будет искать при эластичном поиске определенную строку запроса, я получаю результаты с несколькими данными, такими как Highlights, Hits, score; Но я хочу получить и получить доступ только к данным, которые находятся в документах, как я могу добиться этого на С#?

Это мой код до сих пор:

public string GetByOpinionDocumentTextElastic(string queryString)
    {
        var settings = new ConnectionSettings(new Uri(ConfigurationManager.AppSettings["ElasticSearchAddress"])).SetDefaultIndex("caselaw");
        var client = new ElasticClient(settings);

        var result = client.Search<OpinionDocumentIndexRecord>(body => body.Query(query => query.QueryString(qs => qs.Query(queryString))));


    }

Что должен возвращать мой метод? Заранее спасибо!


person Kenshou    schedule 30.04.2014    source источник


Ответы (1)


Откуда вы получаете свои документы, зависит от используемой вами версии Nest. На странице критических изменений Nest 1.0:

Документы с метаданными

Когда вы выполняете поиск с помощью NEST 0.12, вы получаете QueryResponse<T> с двумя способами перебора результатов. .Documents — это IEnumerable<T>, а .DocumentsWithMetaData — это и IEnumerable<IHit<T>>, в зависимости от ваших потребностей, один из них может быть проще в использовании.

Начиная с NEST 1.0 .DocumentsWithMetaData теперь называется просто .Hits.

Итак, учитывая ваш пример кода:

НЕСТ 0,12

 result.Documents

 result.DocumentsWithMetaData

НЕСТ 1.0

  result.Hits

Самая большая разница со свойствами 0.12 заключается в том, что .Documents — это просто набор результатов поиска, сопоставленный непосредственно с вашим типом OpinionDocumentIndexRecord. В то время как .DocumentsWithMetaData имеют дополнительные свойства Elasticsearch, такие как Highlights, Fields, Explanation, Type, доступные вместе со свойством Source, являющимся вашим OpinionDocumentIndexRecord. То, что вам нужно или нужно, скорее всего, будет зависеть от ваших конкретных потребностей приложения/бизнеса.

Поэтому, если вы используете Nest 0.12.0 и вам нужно решение, которое легко переносится на Nest 1.0.0, я бы рекомендовал использовать .DocumentsWithMetaData, а затем вы можете просто изменить его на .Hits при обновлении клиента Nest.

Если вы действительно заботитесь только о OpinionDocumentIndexRecord независимо от того, к какому свойству вы обращаетесь из результатов, вы можете использовать одно из следующих:

 var myData = new List<OpinionDocumentIndexRecord>();
 foreach (var hit in results.DocumentsWithMetaData)
 //foreach (var hit in results.Hits) //for Nest 1.0
 {
       myData.Add(hit.Source);
 }

 return myData;

Надеюсь это поможет.

person Paige Cook    schedule 30.04.2014
comment
Что происходит, когда вы выбираете ограниченное количество полей? источник нулевой в этом случае? - person Aaron Fischer; 24.10.2014
comment
Аарон. Ответ, который вы ищете, может быть здесь: stackoverflow.com/a/28306464/261405 - person Adrian Carr; 31.03.2015