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
字段。然后,在查询时,相同的分析器将应用于查询,您将获得预期的结果。
如何使用不区分大小写的查询在 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
字段。然后,在查询时,相同的分析器将应用于查询,您将获得预期的结果。