Elasticsearch.Net(NEST) Terms查询多字段匹配 - zLulus/My_Note GitHub Wiki

目标:传参整数型数组[1,2,3,4.....],查询其匹配字段A、B、C中的任意一个的所有数据
查询语句:

{
  "query": {
   "bool": {
      "should": [
        {
          "terms": { 
            "filedA": [1,2,3,4.....]
          }
        },
         {
          "terms": { 
            "filedB": [1,2,3,4.....]
          }
        },
         {
          "terms": { 
            "filedC": [1,2,3,4.....]
          }
        }
      ]
    }
  }
}

对应代码如下:

BoolQueryDescriptor<SMCommodity> boolQueryDescriptor = ...;

IList<Func<QueryContainerDescriptor<ModelClass>, QueryContainer>> queryContainers = new List<Func<QueryContainerDescriptor<ModelClass>, QueryContainer>>();

queryContainers.Add(queryContainerDescriptor =>
{
    return queryContainerDescriptor.Terms(termQueryDescriptor =>
    {
        return termQueryDescriptor.Field(nameof(ModelClass.FiledA).ToJavaScriptPropertyName()).Terms(condition.DataArray);
    });
});

queryContainers.Add(queryContainerDescriptor =>
{
    return queryContainerDescriptor.Terms(termQueryDescriptor =>
    {
        return termQueryDescriptor.Field(nameof(ModelClass.FiledB).ToJavaScriptPropertyName()).Terms(condition.DataArray);
    });
});

queryContainers.Add(queryContainerDescriptor =>
{
    return queryContainerDescriptor.Terms(termQueryDescriptor =>
    {
        return termQueryDescriptor.Field(nameof(ModelClass.FiledC).ToJavaScriptPropertyName()).Terms(condition.DataArray);
    });
});

boolQueryDescriptor = boolQueryDescriptor.Should(queryContainers);
⚠️ **GitHub.com Fallback** ⚠️