从总体上讲,我的用例需要一个嵌套对象,并且我还想对嵌套对象执行不区分大小写的精确匹配。
我从这里的示例开始:
https://www.codementor.io/mehuljain/case-insensitive-exact-matches-in-elasticsearch-nny7ii7fw
除了不使用嵌套对象外,它几乎完全符合我的要求。
我试图通过将类型从text
更改为nested
来修改上一页中的代码:
PUT titles
{
"settings": {
"analysis": {
"normalizer": {
"my_normalizer": {
"type": "custom",
"filter": ["lowercase"]
}
}
}
},
"mappings": {
"default": {
"properties": {
"title": {
"type": "nested",
"fields": {
"normalize": {
"type": "keyword",
"normalizer": "my_normalizer"
},
"keyword" : {
"type": "keyword"
}
}
}
}
}
}
}
但是,这不起作用,并且我收到一条错误消息。
如何在Elastic中的嵌套对象上执行不区分大小写的精确匹配搜索?
答案 0 :(得分:1)
由于要处理嵌套对象,因此需要定义其properties
而不是fields
。
{
"settings": {
"analysis": {
"normalizer": {
"my_normalizer": {
"type": "custom",
"filter": [
"lowercase"
]
}
}
}
},
"mappings": {
"default": {
"properties": {
"title": {
"type": "nested",
"properties": { <----------- should be properties and not fields
"normalize": {
"type": "keyword",
"normalizer": "my_normalizer"
},
"keyword": {
"type": "keyword"
}
}
}
}
}
}
}
基于上述更改,title
将是和反对normalize
和keyword
这两个属性。