我有一个包含我想要点击的嵌套项目集合的索引。一个集合项包含多个属性,这些属性都必须与某个查询匹配,而不仅仅是其中任何一个。这是模型:
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
value 或value2
value 的文档上得到命中,而我希望只命中在同一个NestedProperty1
集合项上具有两个值的文档。