ヒットしたいアイテムのネストされたコレクションを持つインデックスがあります。コレクション アイテムには複数のプロパティが含まれており、いずれかだけでなく、特定のクエリにすべて一致する必要があります。モデルは次のとおりです。
public class IndexEntry1
{
public IEnumerable<NestedType1> NestedProperty1 { get; set; }
}
public class NestedType1
{
public string Member1 { get; set; }
public string Member2 { get; set; }
}
そのため、コレクション内にMember1
とMember2
の値の特定の組み合わせを持つドキュメントのみをヒットしたいと考えています。IndexEntry1.NestedProperty1
コレクションをネストされたものとしてマップする必要があると考えました。
マッピングは次のとおりです。
index: {
properties: {
nestedProperty1: {
type: "nested",
properties: {
member1: {
type: "string",
index_analyzer: "my_index_analyzer_1",
search_analyzer: "my_search_analyzer_1"
},
member2: {
type: "string",
analyzer: "keyword"
}
}
}
},
analysis: {
tokenizer: {
my_ngram: {
type: "nGram",
min_gram: "1",
max_gram: "15"
}
},
analyzer: {
my_index_analyzer_1: {
type: "custom",
tokenizer: "my_ngram",
filters: ["lowercase"]
},
my_search_analyzer_1: {
type: "custom",
tokenizer: "whitespace",
filters: ["lowercase"]
}
}
}
}
次のようなクエリを使用します。
client.Search<IndexEntry1>(d => d
.Query(query => query
.Nested(n => n
.Path(p => p.NestedProperty1)
.Query(q => q
.Bool(b => b
.Must(
m => m.Term("member1", "value1"),
m => m.QueryString(s => s.OnField("member2")
.Query("value2"))))))));
ただし、同じコレクション アイテムの両方の値を持つドキュメントでのみヒットすることを期待しているのに対し、value1
値または値のいずれかを持つドキュメントでまだヒットしています。value2
NestedProperty1