我有ES数据,它包含一个类型为name的text字段。我必须使用小写输入进行搜索,而实际名称可能使用小写和大写符号。我只需要确切的(但不区分大小写的)名称。
我尝试使用match_phrase (以及match_phrase_prefix)。但是它返回自动完成的结果。类似查询
"match_phrase": {
"name": {
"query": "apple iphone 11"
}
}返回两项:
{
"id": "547",
"name": "Apple iPhone 11",
}和
{
"id": "253",
"name": "Apple iPhone 11 Pro",
}我只需要一个与id: 547,即那里没有额外的符号在名称。
Elastcsearch是否有找到确切名称的工具,但在不区分大小写且不自动完成的情况下?
发布于 2021-03-04 12:18:51
我通过一个简单的脚本实现了我的需求:
"filter": [
{
"script": {
"script": {
"source": "doc[params.nameField].value != null && doc[params.nameField].value.equalsIgnoreCase(params.name)",
"lang": "painless",
"params": {
"name": "apple iphone 11",
"nameField": "name.exact"
}
},
"boost": 1.0
}
}
]发布于 2021-03-02 14:07:00
Elastcsearch有找到确切名称的工具吗?
是的,弹性搜索为精确搜索提供了“关键字”类型。
在不区分大小写的窗体中,而没有自动完成?
您可以使用带有小写过滤器的正火器。
PUT /so_索引/
{
"settings":{
"analysis":{
"normalizer":{
"name_normalizer":{
"type":"custom",
"filter":[
"lowercase"
]
}
}
}
}
}PUT /so_index/_映射
{
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"normalizer": "name_normalizer"
}
}
}
}
}GET /so_index/_search
{
"query": {
"match": {
"name.keyword": "apple iphone 11"
}
}
}https://stackoverflow.com/questions/66439588
复制相似问题