如何使用ElasticSeach(C#/ NEST)搜索多个索引?

我创建了这个功能:

            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"

]

}

}

]

}

}

]

}

}

}

以上是 如何使用ElasticSeach(C#/ NEST)搜索多个索引? 的全部内容, 来源链接: utcz.com/qa/429972.html

回到顶部