Поместите SearchDescriptor в отдельную переменную и используйте ее в запросе MultiSearch.

Я хотел бы отделить свой SearchDescriptor от своего запроса MultiSearch, чтобы упростить повторное использование.

Вот что у меня сейчас (до разлуки). Он работает идеально:

IMultiSearchResponse result = esClient
    .MultiSearch(search => search
        .Search<ElasticSearchCorporation>(a => a
            .Size(100)
            .Query(q => q
                .MultiMatch(query => query
                    .Type(TextQueryType.CrossFields)
                    .OnFieldsWithBoost(b => b
                        .Add(f => f.Summary, 1.6)
                        .Add(f => f.Summary.Suffix("ngram"), 1.5)
                        .Add(f => f.Description, 1.0))
                    .Query(searchQuery)))));

Это то, что я пытаюсь сделать, но я, видимо, сделал что-то не так.

SearchDescriptor<ElasticSearchCompany> companySearchDescriptor = new SearchDescriptor<ElasticSearchCompany>();
companySearchDescriptor
    .Size(100)
    .Query(q => q
        .SimpleQueryString(query => query
            .OnFieldsWithBoost(b => b
                .Add(f => f.Summary, 1.6)
                .Add(f => f.Summary.Suffix("ngram"), 1.5)
                .Add(f => f.Description, 1.0)
                .Add(f => f.City.Suffix("ngram"), 1.1)
                .Add(f => f.City, 1.0))
            .Query(searchQuery)));

IMultiSearchResponse result = esClient
    .MultiSearch(search => search
        .Search(companySearchDescriptor));

Я получаю эту ошибку: «Аргументы типа для метода« Nest.MultiSearchDescriptor.Search (System.Func, Nest.SearchDescriptor>) »не могут быть выведены из использования. Попробуйте явно указать аргументы типа».

Однако я явно указал аргумент типа. Вот для чего нужен SearchDescriptor<ElasticSearchCompany>.

Редактировать 2: Возможно, мое непонимание связано с нюансами беглого API.


person Brandon    schedule 19.08.2014    source источник


Ответы (1)


.Search<>() получает Func<SearchDescriptor<T>, SearchDescriptor<T>>, а не только SearchDescriptor<T>.

Попробуй это:

IMultiSearchResponse result = esClient
.MultiSearch(search => search
    .Search<ElasticSearchCompany>(d => companySearchDescriptor));
person Greg Marzouka    schedule 20.08.2014
comment
Спасибо. Похоже, я должен был начать здесь: stackoverflow.com/questions/5315500/ - person Brandon; 21.08.2014