Поиск ElasticSearch с использованием клиента NEST C #

Я начал искать поисковую систему, и после некоторого чтения я решил использовать ElasticSearch (что довольно удивительно :)), мой проект на C #, поэтому я искал клиента и начал использоватьГНЕЗДОвсе довольно просто, но я немного запутался в поисковой части.

Я хочу искатьall fields наspecific type я придумал следующий код:

<code>elasticClient.Search<NewType>(s => s.Query(q => q.QueryString(d => d.Query(queryString))));
</code>

Я видел, что большая часть поиска по строковым запросам устарела, и хотел убедиться, что вышеизложенное является правильным способом сделать это (вышеприведенное не помечено как устаревшее ...), и это немного длинно для простой задачи, так что, возможно, кто-нибудь знает другой способ сделать это.

Спасибо

Ответы на вопрос(4)

вы можете просто использовать JObjects из json.net и построить свой запрос таким образом. Тогда вы можете запустить его так же, как указано выше.

JObject query = new JObject();
query["query"] = new JObject();
query["query"]["text"] = new JObject();
query["query"]["text"]["_all"] = searchTerm;
query["from"] = start;
query["size"] = maxResults;
string stringQuery = JsonConvert.SerializeObject(query);
var results = connectedClient.SearchRaw<SearchItem>(stringQuery);

Мне нравится этот способ лучше, потому что DSL в ES использует зарезервированные ключевые слова в C #, такие как bool, поэтому мне не нужно выполнять экранирование.

 28 мар. 2018 г., 12:45
Какую версию ты используешь? Я получаю ошибку заSearchRaw

NewType & gt; в методе поиска вот так:

var json = JsonConvert.SerializeObject(searchQuery);
var body = new PostData<object>(json);
var res = _elasticClient.Search<SearchResponse<NewType>>(body);
IEnumerable<NewType> result = res.Body.Hits.Select(h => h.Source).ToList();

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

Примечание: я нашел очень мало документации о классе PostData и его параметре универсального типа

 19 апр. 2016 г., 10:53
Документация дляPostData<T> можно найти здесь -elastic.co/guide/en/elasticsearch/client/net-api/2.x/…, Я посмотрю, сможем ли мы добавить пример использования

elasticClient.Search<NewType>(s => s.Query(q => q.QueryString(d => d.Query(queryString))));

Является предпочтительным способом поиска, и тот факт, что он кажется немного длинным, заключается в том, что есть множество опций, с которыми вы можете поиграть, которые здесь не используются. Я всегда открыт для предложений, чтобы сделать его короче!

Перегрузка строки устарела, но не может быть удалена из NEST. Я обновлю устаревшее сообщение, чтобы явно упомянуть об этом.

 05 июл. 2012 г., 08:29
Реализовано :)github.com/Mpdreamz/NEST/commit/…
 05 июл. 2012 г., 08:06
elasticClient.Search<NewType>(s => s.Query("query string")) как ярлык тожеelasticClient.Search<NewType>(s => s.Query(q => q.QueryString(d => d.Query(queryString)))); может быть очень хорошей идеей, я, вероятно, переименую ее вelasticClient.Search<NewType>(s => s.QueryString("query string")) хоть. Спасибо кейсар :)
 05 июл. 2012 г., 08:10
Также я не рекомендовал это делать, потому что, если вы используете необработанную перегрузку JSON, мне очень интересно узнать, почему. Вот почему я использую deprecate () со ссылкой на github, я мог бы вернуться к этому решению до релиза 1.0, хотя, если он вызывает проблемы или сбивает с толку, хотя.
 keisar05 июл. 2012 г., 02:47
Здравствуйте! Обновление сообщения было бы действительно полезным, но если вы не планируете его удалять, зачем отказываться от него? Я чувствую, что это должно быть более удобным, потому что многие люди используют NEST для поиска в произвольной форме (ввод в текстовое поле), может быть, простоasticClient.Search & lt; NewType & gt; (s = & gt; s.Query (& quot; строка запроса & quot;)) (что, я считаю, является устаревшим :)) в любом случае отличный клиент, спасибо за предоставление!
 keisar05 июл. 2012 г., 12:38
Это было быстро :) Я проверю это в ближайшие дни, я могу зарегистрироваться в проекте, чтобы внести свой вклад, еще раз спасибо за проект и ответы
Решение Вопроса

создаю свой объект запроса, используя анонимный тип C #, и сериализую его в JSON.

Таким образом, у меня может быть прямое отображение из всех примеров запросов JSON, нет необходимости переводить в этот «запрос DSL».

Elasticsearch сам по себе развивается довольно быстро, и поэтому в этом DSL-запросе не хватает некоторых функций.

Изменить: Пример:

var query = "blabla";
var q = new
        {
            query = new
            {
                text = new
                {
                    _all= query
                }
            }, 
            from = (page-1)*pageSize, 
            size=pageSize
        };
        var qJson = JsonConvert.SerializeObject(q);
        var hits = _elasticClient.Search<SearchItem>(qJson);
 keisar14 мая 2012 г., 17:10
Есть ли шанс для небольшого примера кода (одна строка, ничего слишком большого :))? Я не совсем понял, что вы имели в виду ...

Ваш ответ на вопрос