我正在使用以下搜索查询,根据用户输入的值填充自动填充下拉列表。
{
_source: 'event',
query: {
simple_query_string: {
query: ''+term+'*', // converts to string; adds * to match prefix
fields: ['event']
}
},
size:0,
track_total_hits: false,
aggs: {
filterValues: {
composite: {
size: 100,
sources: [
{ "filterValue": { "terms": { "field": 'event', "missing_bucket": true } } }
],
after: { 'event': after }
},
}
}
}
用于索引的字段值: UYB 4.9.0 AJF 5 Qnihsbm 。
当前,如果用户键入首字母
u
或U
,Elasticsearch将以小写的uyb 4.9.0 ajf 5 qnihsbm
返回上述值。我如何维持这种行为,但返回的值却与被索引的值完全一样?即UYB 4.9.0 AJF 5 Qnihsbm
字段映射
"mappings": {
"properties": {
"event": {
"type": "keyword",
"normalizer": "normalizer_1"
},
.....
}
}
ES配置
"settings": {
"analysis": {
"normalizer": {
"normalizer_1": {
"type": "custom",
"char_filter": [],
"filter": ["lowercase", "asciifolding"]
}
}
}
},
最佳答案
您的映射中应该有另一个不小写的字段,这就是您要搜索的字段。
"mappings": {
"properties": {
"event": {
"type": "keyword",
"fields": {
"search": {
"type": "keyword",
"normalizer": "normalizer_1",
}
}
},
.....
}
}
然后,您的查询将需要在
event.search
上运行,而不是ʻevent`` simple_query_string: {
query: ''+term+'*', // converts to string; adds * to match prefix
fields: ['event.search']
} ^
|
add this
所有其余的都可以保持不变。