Я пытаюсь создать запрос Elasticsearch в NEST, который использует запрос Bool, но все, что я помещаю в метод Bool, похоже, игнорируется.
Это код, который я пробовал:
var query = "my query";
var fileType = "Poster";
var searchResults = _client.Search<Doc>(s =>
s.Query(q =>
q.Bool(
b => b.Must(
m => m.MatchPhrase(mp =>
mp.Query(query).Fuzziness(2))
).Must(m => m.Match(
mp => mp.Query(fileType))))
).Highlight(x =>
x.OnFields(y =>
y.OnField(f => f.File)
.PreTags("<strong>")
.PostTags("</strong>"))
).Fields("fileType", "title"));
Вот запрос JSON, который NEST генерирует из этого кода. Обратите внимание, что отсутствует все свойство запроса:
{
"highlight": {
"fields": {
"file": {
"pre_tags": [
"<strong>"
],
"post_tags": [
"</strong>"
]
}
}
},
"fields": [
"fileType",
"title"
]
}
Я попытался убрать дополнительную подсветку и выбор поля, если это вызывало проблему, просто оставив Query и Bool:
var searchResults = _client.Search<Doc>(s =>
s.Query(q =>
q.Bool(
b => b.Must(
m => m.MatchPhrase(mp =>
mp.Query(query).Fuzziness(2))
)
.Must(m => m.Match(mp => mp.Query(fileType))))
));
Этот код создает пустой объект JSON.
Я не смог найти упоминания о методах Bool и Must в документации NEST, и я не смог понять это методом проб и ошибок.
Что я делаю не так?
Примечания
Я использовал метод Query NEST с простой строкой запроса. Он сгенерировал ожидаемый запрос JSON, поэтому я почти уверен, что все настроено правильно.
Это запрос JSON, который я пытаюсь воссоздать с помощью NEST:
{
"fields": [
"title",
"fileType"
],
"query": {
"bool": {
"must": [
{
"match": {
"fileType": {
"query": "Poster"
}
}
},
{
"match_phrase": {
"file": {
"query": "my query",
"fuzziness": 2
}
}
}
]
}
},
"highlight": {
"fields": {
"file": {}
}
}
}