我正在使用Nest
连接到ElasticSearch并执行一些查询。到目前为止,我已经能够得到我要求的结果给出一个通配符查询如下:
var searchResults = _client.Search<MyIndexable>(
body =>
body
.Index("someIndex")
.Query(
query =>
query.QueryString(
qs => qs.
OnFields(f => f.Title, f => f.Description)
.Query(searchTerm + "*"))));
但是现在我需要为我的查询添加额外的条件以用于某个用例。
我需要的不仅是
[searchTerm]*
,还有两个 其他字段匹配:
- searchTerm +“*”
- field1 =“some string”
- field2 =“some Guid”
我确信必须有一种方法可以在弹性搜索中使用Nest
),但我无法找到它。
我知道我可以将两个额外的字段添加到索引中(如someIndex_field1_field2
中所示),这对我来说绝对是一个选项,因为field1和field2是不错的分区(实际上,它可能更好一些)选项允许更好的分区)但我只是想看看是否有办法避免这样做,而是,如果有可能为查询添加多个条件。
有谁知道如何实现这个目标?
非常感谢,
答案 0 :(得分:5)
假设field1
和field2
只是Title
和Description
等其他字段,您可以使用bool must
查询来实现您想要的效果。
var searchResults = _client.Search<MyIndexable>(s => s
.Query(q => q
.Bool(b => b
.Must(
subQuery => subQuery.QueryString(qs => qs.OnFields(f => f.Title, f => f.Description).Query(searchTerm + "*"")),
subQuery => subQuery.Term(f => f.field1, "some string"),
subQuery => subQuery.Term(f => f.field2 , "some Guid")))));