Как найти индекс по умолчанию, используя NEST? - PullRequest
0 голосов
/ 13 марта 2019

Это мой индекс по умолчанию:

new ConnectionSettings(node).DefaultIndex("profiles")

В настоящее время у меня есть этот запрос, где мне нужно выполнить поиск, используя NEST:

GET profiles/_search

Моя проблема в том, что NEST требует объект для метода поиска.

ElasticSearch.Search< object>()

Как мне выполнить поиск по самому индексу профилей?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

ElasticSearch.Search () не выполняет поиск объекта. Он использует ваш профиль индекс при вызове метода поиска.

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

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

И позвоните на сервер ElasticSearch с

ElasticSearch.Search<Profile>()

В результате вы получите список профилей.

0 голосов
/ 14 марта 2019

Методы T в NEST, такие как Search<T>(), используются для нескольких целей:

  1. Предоставить строго типизированный доступ через лямбда-выражения для свойств T
  2. В случае, когда API возвращает документ JSON, такой как Search<T>(), возвращающий первоначально проиндексированный документ в поле _source каждого попадания, T будет типом, к которому этот документ десериализован.

Если вам не нужно или не нужно какое-либо из этих поведений, вы можете использовать object или dynamic для T и указывать строки для таких значений, как Field. Затем вам нужно решить, как читать это POCO; в случае dynamic возвращаемый тип является внутренним JObject подобным типом, поэтому вы можете получить к нему динамический доступ.

Чтобы выполнить поиск без типа в URI, вы можете использовать

var searchResponse = client.Search<object>(s => s
    .AllTypes()
    .Query(q => q
        .Match(m => m
            .Field("some_field")
            .Query("match query")
        )
    )
);

, который приведет к поисковому запросу, например

POST http://localhost:9200/profiles/_search 
{
  "query": {
    "match": {
      "some_field": {
        "query": "match query"
      }
    }
  }
}
...