Предыстория/Цель
У меня есть запрос в ElasticSearch, где я использую фильтры для нескольких полей (относительно небольшой набор данных, и мы точно знаем, какие значения должны быть в этих полях во время запроса). Идея состоит в том, что мы выполним полнотекстовый запрос, но только после того, как отфильтруем некоторые выборки, сделанные пользователем.
Я разместил ElasticSearch за контроллером WebAPI и решил, что для выполнения запроса имеет смысл использовать NEST.
Запрос на простом английском
У нас есть фильтры для нескольких полей. Каждый внутренний фильтр является фильтром или, но вместе они представляют собой И.
В SQL эквивалентом псевдокода будет select * from table where foo in (1,2,3) AND bar in (4,5,6)
.
Вопросы
- Могу ли я упростить то, как я думаю об этом запросе, основываясь на том, что вы видите ниже? Я упускаю из виду какой-то базовый подход? Это кажется тяжелым, но я новичок в ES.
- Как правильно представить приведенный ниже запрос в синтаксисе NEST?
- Является ли NEST лучшим выбором для этого? Должен ли я вместо этого использовать библиотеку ElasticSearch и переходить на более низкий уровень?
Текст запроса
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"or": [
{ "term": { "foo": "something" } },
{ "term": { "foo": "somethingElse" } }
]
},
{
"or": [
{ "term": { "bar": "something" } },
{ "term": { "bar": "somethingElse" } }
]
}
]
}
}
}
},
"size": 100
}