我使用字符串数组索引字段如下:
public class MetaData
{
public string[] time { get; set; }
public string name { get; set; }
}
client.CreateIndex(casedirectory_metadata, c => c
AddMapping<object>(m => m
.Properties(props => props
.String(ps => ps.Name("time").IndexAnalyzer("keyword"))
.String(ps => ps.Name("name").IndexAnalyzer("keyword"))
)));
MetaData objmetadata = new MetaData();
objmetadata.time = new string[] { "morning" };
objmetadata.name = "jhon";
client.Index<object>((object)objmetadata);
MetaData objmetadata = new MetaData();
objmetadata.time = new string[] {"this morning", "9.30 am", "evening" };
objmetadata.name = "jhon rapher";
client.Index<object>((object)objmetadata);
在上面的代码中有两个索引时间和名称的字段。 如果是简单的字符串类型,则时间字段是字符串数组类型和名称字段 在下面的代码中,使用聚合时间字段
执行通配符搜索var qryRes1 = client.Search<object>(x => x
.Aggregations(ag => ag
.Filter("filter", (flt => flt
.Filter(f =>
{
FilterContainer filter = null;
filter &= f.Query(qr => qr.Wildcard(wl => wl.OnField("time").Value("morning")));
return filter;
})
.Aggregations(agr => agr
.Terms("time", tr =>
{
TermsAggregationDescriptor<object> trmAggDescriptor = new TermsAggregationDescriptor<object>();
trmAggDescriptor.Field("time");
trmAggDescriptor.Size(0);
return trmAggDescriptor;
}))))
));
上面的查询应该只返回&#34; morning&#34;因为第一个&#34;早上&#34;使用通配符过滤掉,然后应用聚合,但它聚合并返回时间字段中的所有值。如果对字段名称应用相同的查询=&#34; john&#34;它返回正确的结果1记录。
我是否还需要做任何其他事情来在阵列类型字段上进行外卡搜索?