Я знаю, что могу выполнить поиск по вложенному пути, когда хочу найти только одно значение, используя следующий код:
.Query(q => q
.Nested(n => n
.Path(p => p.memberships)
.Query(q2 => q2
.Bool(b => b
.Should(s2 => s2
.Match(m => m.Field("memberships.Id").Query("20334089"))))))))
Это отлично работает.Я пытаюсь сделать запрос на основе списка строк в качестве значений полей.Я использую эту функцию TermAny, основанную на предыдущем ответе, и подумал, что она могла бы работать с этим для запроса с вложенным путем:
https://stackoverflow.com/a/36377068/1451776
private static QueryContainer TermAny<T>(QueryContainerDescriptor<T> descriptor, Field field, object[] values) where T : class
{
QueryContainer q = new QueryContainer();
foreach (var value in values)
{
q |= descriptor.Term(t => t.Field(field).Value(value));
}
return q;
}
Допустим, у меня есть списокИдентификаторы в строковом массиве myIDSArry, и я хочу использовать его для поиска во вложенном поле пути, называемом членством вasticsearch.Я пробовал это
.Query(q => q
.Nested(n => n
.Path(p => p.memberships)
.Query(q2 => q2
.Bool(b => b
.Should(s => TermAny(s, "memberships.Id", myIDSArry)))))))
Однако это возвращается как 0 хитов, и я знаю, что должны быть некоторые в результатах.Любые идеи о том, как я могу использовать это на основе списка строк для поиска?