Фильтрация по значению поля вложенного объекта в Elasticsearch - PullRequest
0 голосов
/ 28 сентября 2018

Я хочу отфильтровать документ по значению вложенного поля.Мой документ похож на этот, и я хочу отфильтровать его по параметру цвета:

{
  "_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" }}
          ]
        }
      }
    }
  }
}

Почему ??

1 Ответ

0 голосов
/ 28 сентября 2018

Ваш запрос term ищет точное совпадение, а запрос match анализируется перед поиском.Если вы используете стандартный анализатор, он будет сокращать ваши термины при анализе.

Вы можете использовать поле ключевого слова, если вам нужно точное соответствие.

{
  "query": {
    "bool": {
      "filter": {
        "nested": {
          "path": "parameters",
          "query": {
            "term": {    
              "parameters.Color.keyword":"Gold"
            }
          }  
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...