弹性搜索查询使字符串匹配不区分大小写

时间:2016-01-11 13:48:57

标签: c# elasticsearch nest

filterInputs.profileId =“d12”;

var results = client
                                    .Search<StockBaseEntity>(s => s
                                    .Type("item")
                                    .Take(1000)
                                    .Filter(f => f
                                    .Bool(bb => bb
                                    .Must(ms =>
                                    {
                                        return
                                           !ms.Term("profileId", filterInputs.profileId)
                                    })))
                                    .Sort(so => so.OnField("sortScore").Ascending())
                                );

“profileId”可以是小型或大写型或混合型。无论如何,我都希望返回结果。

我该怎么做?

目前,其治疗d123与D123不同。 OR da与DA不同,与dA不同。 (所有这些都应该相同)。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果您使用standard分析器进行字段profileId(我猜您不会提出这个问题),那么这些值会以小写形式存储在Elasticsearch中指数。您需要将filterInputs.profileId的值小写并将其传递到Term()过滤器。

var results = client.Search<StockBaseEntity>(s => s
    .Type("item")
    .Take(1000)
    .Filter(f => f
        .Bool(bb => bb
            .Must(ms => 
            { 
                return !ms.Term("profileId", filterInputs.profileId.ToLowerInvariant());
            })))
    .Sort(so => so.OnField("sortScore").Ascending()));