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

5

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

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

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

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

Спасибо

Ваш Ответ

4   ответа
2

вы можете просто использовать 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, поэтому мне не нужно выполнять экранирование.

Какую версию ты используешь? Я получаю ошибку заSearchRaw
1

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 и его параметре универсального типа

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

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

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

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

Также я не рекомендовал это делать, потому что, если вы используете необработанную перегрузку JSON, мне очень интересно узнать, почему. Вот почему я использую deprecate () со ссылкой на github, я мог бы вернуться к этому решению до релиза 1.0, хотя, если он вызывает проблемы или сбивает с толку, хотя.
Реализовано :)github.com/Mpdreamz/NEST/commit/…
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")) хоть. Спасибо кейсар :)
Здравствуйте! Обновление сообщения было бы действительно полезным, но если вы не планируете его удалять, зачем отказываться от него? Я чувствую, что это должно быть более удобным, потому что многие люди используют NEST для поиска в произвольной форме (ввод в текстовое поле), может быть, простоasticClient.Search & lt; NewType & gt; (s = & gt; s.Query (& quot; строка запроса & quot;)) (что, я считаю, является устаревшим :)) в любом случае отличный клиент, спасибо за предоставление! keisar
Это было быстро :) Я проверю это в ближайшие дни, я могу зарегистрироваться в проекте, чтобы внести свой вклад, еще раз спасибо за проект и ответы keisar
14

создаю свой объект запроса, используя анонимный тип 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);
Есть ли шанс для небольшого примера кода (одна строка, ничего слишком большого :))? Я не совсем понял, что вы имели в виду ... keisar

Похожие вопросы