我创建了这个功能:
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以定位特定索引”
但是我该怎么办呢?
由于不建议使用indexs查询,因此它目前仍可以使用,但不推荐使用该警告是可能在将来的主要版本中将其删除。
您可以通过以下方式实现与索引查询相同的功能:
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" ] } } ] } } ] } } }