我想按嵌套字段值过滤文档。我的文档就是这样,我想按Color参数对其进行过滤:
{
"_index": "myindex",
"_type": "product",
"_id": "984984",
"_source": {
"id": "98418",
"name": "Product1",
..
"parameters": {
"Color": [
"Black",
"Gold"
]
}
}
}
我的映射是:
{
"myindex": {
"mappings": {
"product": {
"properties": {
..
"parameters": {
"type": "nested",
"properties": {
"Color": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
..
}
}
}
}
}
}
我的过滤器查询如下:
{
"query": {
"bool": {
"filter": {
"nested": {
"path": "parameters",
"query": {
"term": {
"parameters.Color":"Gold"
}
}
}
}
}
}
}
但是不幸的是我收到的文件为零,我不明白为什么?
谢谢
正在运行的事件:
{
"query": {
"nested": {
"path": "parameters",
"query": {
"bool": {
"must": [
{ "match": { "parameters.Color": "Gold" }}
]
}
}
}
}
}
..但这不是:
{
"query": {
"nested": {
"path": "parameters",
"query": {
"bool": {
"filter": [
{ "term": { "parameters.Color": "Gold" }}
]
}
}
}
}
}
为什么?
答案 0 :(得分:1)
您的term
查询正在寻找完全匹配的内容,并且在搜索之前先对match
查询进行分析。如果您使用标准分析仪,它将在分析术语时将其小写。
如果需要进行完全匹配,则可以使用关键字字段。
{
"query": {
"bool": {
"filter": {
"nested": {
"path": "parameters",
"query": {
"term": {
"parameters.Color.keyword":"Gold"
}
}
}
}
}
}
}