如何使用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