Elasticsearch 搜索不区分大小写的字段的精确值

Elasticsearch searching exact value of field with case insensitive

如何使用不区分大小写的查询在 elasticsearch 字段中按精确值进行搜索? 例如,我有值为 { "Type": "Płatność kartą" } 的字段, 我的查询将按值 "płatność kartą" 进行搜索。我需要能够按字符串参数列表(即 "płatność kartą"、"płatność gotówką" 等)进行搜索。我尝试了弹性 TERMS 查询,但是当出现敏感的大小写差异时它没有 return 值。字段索引设置为 not_analyzed.

如果您在索引时选择 not analyzed,Elastic 不会在索引时分析这些术语,这意味着它们是逐字存储的。因此,当您查询时,您得不到任何结果,因为查询字词与存储的字段不匹配。

为了能够使用小写查询并获得大写结果,您需要在映射中使用 analyzer。以下是 docs.

中的可用选项

如果 none 可用的分析器适合您,您可以通过指定要应用的过滤器来定义您的自定义分析器。例如,仅使用 lowercase 过滤器,Elastic 将索引刚刚小写的 RegisteredPaymentType 字段。然后,在查询时,相同的分析器将应用于查询,您将获得预期的结果。