我创建了这个功能:
public static ISearchResponse<Immo> searchImmoByCustomerField(Nest.ElasticClient esClient, string esIndex, string esIndex2, int from, int take, string qField, string nmqField, string qTerm, string nmqTerm)
{
var result = esClient.Search<Immo>(s => s
.AllIndices()
.Query(q => q
.Indices(i => i
.Indices(new[] { esIndex, esIndex2 })
.Query(iq => iq.Term(qField, qTerm))
.NoMatchQuery(iq => iq.Term(nmqField, nmqTerm))
)
)
);
return result;
}
在2个索引中查找搜索词的函数。 Visual Studio向我显示消息:
“已弃用。您可以在查询中指定_index以定位特定索引”
但我怎么能这样做?
答案 0 :(得分:3)
indices query is deprecated因此它目前仍然有效,但弃用是一个警告,它可能会在未来的主要版本中删除。
您可以使用
实现与索引查询相同的功能var esIndex = "index-1";
var esIndex2 = "index-2";
var qField ="query-field";
var qTerm = "query-term";
var nmqField = "no-match-query-field";
var nmqTerm = "no-match-query-term";
client.Search<Immo>(s => s
.AllIndices()
.Query(q => (q
.Term(t => t
.Field(qField)
.Value(qTerm)
) && +q
.Terms(t => t
.Field("_index")
.Terms(new[] { esIndex, esIndex2 })
)) || (q
.Term(t => t
.Field(nmqField)
.Value(nmqTerm)
) && !q
.Terms(t => t
.Field("_index")
.Terms(new[] { esIndex, esIndex2 })
))
)
);
生成以下查询JSON
POST http://localhost:9200/_all/immo/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"query-field": {
"value": "query-term"
}
}
}
],
"filter": [
{
"terms": {
"_index": [
"index-1",
"index-2"
]
}
}
]
}
},
{
"bool": {
"must": [
{
"term": {
"no-match-query-field": {
"value": "no-match-query-term"
}
}
}
],
"must_not": [
{
"terms": {
"_index": [
"index-1",
"index-2"
]
}
}
]
}
}
]
}
}
}