Динамический Bool Query for NEST (ElasticSearch) - PullRequest
0 голосов
/ 06 июля 2018

Добрый день:

Я пытаюсь получить динамический Bool Query. Пример ...

        QueryContainer addressQuery = null;
        QueryContainer typeQuery = null;

        BoolQueryDescriptor <Facility> boolQuery = new BoolQueryDescriptor<Facility>();
        QueryContainerDescriptor<Facility> sh = new QueryContainerDescriptor<Facility>();
        SearchDescriptor<Facility> mainSh = new SearchDescriptor<Facility>();
        if (search.searchTerm != null)
        {
            addressQuery = sh.Term(f => f.Address, search.searchTerm) ||
                                            sh.Match(m => m.Field(f => f.Address).Query(search.searchTerm) ) ||
                                            sh.Term(f => f.ZipCode, search.searchTerm) ||
                                            sh.Match(m => m.Field(f => f.State).Query(search.searchTerm));
            boolQuery = boolQuery.Should(b => addressQuery);
        }
        if (search.type != null) {
            typeQuery = sh.Term(f => f.Types.First(), search.type);
            boolQuery = boolQuery.Must(b => typeQuery && addressQuery);
        }

        if (boolQuery != null)
        {
           mainSh = mainSh.Query(q => q.Bool(b => boolQuery));
           request = await this._elasticClient.SearchAsync<Facility>(s => mainSh.Size(search.size));
        }

Этот запрос превращается в ИЛИ между AddressQuery и TypeQuery, однако я бы хотел достичь условия И между обоими запросами. Эффективно делает запрос динамическим. Это возможно? Пример: динамический addressQuery && typeQuery.

Спасибо.

1 Ответ

0 голосов
/ 08 июля 2018

Запустите его. Вы можете && или || запросить контейнеры ... сортировщик, например:

 queryContainer1=queryContainer1 && queryContainer2

Тогда .bool(b => b(queryContainer1)).

...