Поиск Elasticsearch / Nest с использованием MultiMatch с усилением по умолчанию для всех других полей - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь создать запрос, который в основном выполняет поиск по всем полнотекстовым полям, увеличив несколько, но оставляя все остальные значения по умолчанию равными 1.

Когда я не включаю никаких полей,все имеет повышение 1 (мы находимся на версии 6.4.2, которая поддерживает по умолчанию, когда поля не указаны ):

var results = await _ElasticClient.SearchAsync<dynamic>(s => s
    .Query(q => q
        .MultiMatch(m => m
            .Query(request.Query)
        )
    )
);

Однако, как только я пытаюсь повыситьодиночное поле, оно удаляет значения по умолчанию для всех других полей, только поиск по явному полю:

var results = await _ElasticClient.SearchAsync<dynamic>(s => s
    .Query(q => q
        .MultiMatch(m => m
            .Fields(f => f.Field("firstName^20"))
            .Query(request.Query)
        )
    )
);

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

var results = await _ElasticClient.SearchAsync<dynamic>(s => s
    .Query(q => q
        .MultiMatch(m => m
            .Fields(f => f.Field("*.*^1"))
            .Fields(f => f.Field("firstName^20"))
            .Query(request.Query)
        )
    )
);

Я также попытался Bool объединить их вместе, но это также просто совпадает с firstName:

var results = await _ElasticClient.SearchAsync<dynamic>(s => s
    .Query(q => q
        .Bool(b => b
            .Should(m => m
                .MultiMatch(mm => mm
                    .Query(request.Query)
                )
            )
            .Should(m => m
                .MultiMatch(mm => mm
                    .Fields(f => f.Field("firstName^20"))
                    .Query(request.Query)
                )
            )
        )
    )
);

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

1 Ответ

0 голосов
/ 03 октября 2018

Разобрался с моей проблемой.Я соединял несколько .Fields() (множественное число) вместе, где у меня должен был быть только один .Fields() (множественное число), а затем составлял цепочку .Field() (единственное число) вместе:

var results = await _ElasticClient.SearchAsync<dynamic>(s => s
    .Query(q => q
        .MultiMatch(m => m
            .Fields(f => f
                .Field("firstName^20")
                .Field("*.*^1")
            )
            .Query(request.Query)
        )
    )
);
...