elasticsearch - 在 Elasticsearch 中,如何将规范化器与嵌套对象结合起来?
问题描述
概括地说,我的用例需要一个嵌套对象,我还想对嵌套对象执行不区分大小写的精确匹配。
我从这里的例子开始:
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 中的嵌套对象执行不区分大小写的精确匹配搜索?
解决方案
由于您正在处理嵌套对象,因此您需要定义它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
。
推荐阅读
- java - 有没有办法为我的主要活动设置条件?
- api - Go Daddy API 的 PowerShell Invoke-WebRequest 错误
- c# - 如何在 .restext 资源条目中保留前导或尾随空格?
- python - 对模型类的 __init__ 方法的更改似乎没有生效
- javascript - 如何将 GLSL 比例和位置与 VideoContext 一起使用?
- java - 我如何在 Java 中验证日期(仅当前日期或之后)
- jquery - 关于 Laravel Webpack Mix 和提取方法
- r - R - dplyr 中的代码行运行时间
- unix - 使用 find 命令但收到错误“路径必须在表达式之前”
- python - Pandas drop_duplicates -> 致命的 Python 错误:释放无