情况就是这样。我有弹性的一组。这些组中的每一个都有一个嵌套的项目列表。 组和项都有一个名为serial的属性,它们是唯一的。 我得到了该组的序列号和一个项目的序列号,并且我应该返回这两个项目。
目前我正在采取以下方式:
public item findItem(string groupSerial, string itemSerial)
{
var searchResponse = _elasticClient.Search<Group>(s => s
.Index(_config.groupIndexName)
.Query(q => q
.ConstantScore(cs => cs
.Filter(f => f
.Term(t => t
.Field(fi => fi.serial)
.Value(groupSerial)
)
)
)
).Query(q => q
.Nested(c => c
.InnerHits(i => i.Explain())
.Path(p => p.items)
.Query(nq => nq.Term(t => t
.Field(field => field.items.First().serial)
.Value(itemSerial)))))
);
var result = searchResponse.Documents.FirstOrDefault();
return result?.items.Find(item => item.serial == itemSerial);
}
我觉得应该有一种更有效的方式。就像从弹性搜索中直接获取项目一样。有谁知道怎么做?