我的弹性搜索文档如下:
[
{
_index: myindex,
name: John,
hobbies: Swimming, Golfing
},
{
_index: myindex,
name: Alice,
hobbies: Golfing, Swimming
},
{
_index: myindex,
name: Alice,
hobbies: Golfing
},
]
我需要一种方法来返回在爱好字段中列为Hobbies
首位的所有文档。
我正在使用弹性搜索NEST库来解决此问题。我创建了一个用C#构建的Elasticsearch服务来创建查询。在此服务中,我进行了查找以获取所有用户并将筛选器应用于搜索。在这种情况下,我想首先获取其Hobbies
被列为Golfing
的所有文档,如果Golfing
不是第一个爱好,那么我就不需要这些文档。
型号:
public class User {
public const string Name {get; set;}
public List<string> Hobbies {get; set;}
}
我的查询
query = query.Bool(b => b
.Filter(filter => filter
.Bool(b2 => b2
.Must(must => must
.Match(match => match
.Field(l => l.Hobbies.First() == "Golfing")
)
)
)
)
);
我想过滤文档,以便只获取那些兴趣爱好首先列为“高尔夫”的文档。我的预期结果应该是:
[
{
_index: myindex,
name: Alice,
hobbies: Golfing, Swimming
},
{
_index: myindex,
name: Alice,
hobbies: Golfing
},
]
但是,它返回所有三个。我如何做到这一点,使其仅返回爱好是高尔夫的第一爱好的文件?
答案 0 :(得分:0)
我认为实现这一目标的唯一方法是使用scrip query
在您的情况下,例如:
var response = client.Search(s => s
.Query(q => q
.Script(sq => sq
.Source("doc['hobbies'].value[0]. == 'Golfing'")
)
)
)
);