Разве невозможно индексировать документ, где свойство имеет несколько полей, одно из которых является типом завершения с контекстами? - PullRequest
0 голосов
/ 18 апреля 2019

Вот мое отображение (некоторые поля переименованы / удалены), я использую ES 6.0

{
    "mappings": {
      "_doc" :{
        "properties" : {
            "username" : {
                "type": "keyword",
                "fields": {
                  "suggest" : {
                    "type" : "completion",
                    "contexts": [
                      { 
                        "name": "user_id",
                        "type": "category"
                      }
                    ]
                  }
                }
            },
            "user_id": {
              "type": "integer"
            }
        }
      }
    }
}

Теперь, когда я пытаюсь проиндексировать документ с помощью

PUT usernames/_doc/1
{
  "username" : "JOHN",
  "user_id": 1
}

OR

PUT usernames/_doc/1
{
  "username" : {
    "input": "JOHN",
    "contexts: {
      "user_id": 1
    }
  }
  "user_id": 1
}

Первое не индексируется в контексте, а второе просто не выполняется. Я попытался добавить путь так:

{
    "mappings": {
      "_doc" :{
        "properties" : {
            "username" : {
                "type": "keyword",
                "fields": {
                  "suggest" : {
                    "type" : "completion",
                    "contexts": [
                      { 
                        "name": "user_id",
                        "type": "category",
                        "path": "user_id",
                      }
                    ]
                  }
                }
            },
            "user_id": {
              "type": "integer"
            }
        }
      }
    }
}

И повторная попытка индексации

PUT usernames/_doc/1
{
  "username" : "JOHN",
  "user_id": 1
}

Но просто выбрасывает контекст, должно быть ключевое слово или текстовая ошибка. Должен ли я сдаться и сделать совершенно новое свойство username-autocomplete вместо этого? Или есть какой-то волшебный способ, где я могу иметь подсказку для завершения контекста и другое поле в том же свойстве и иметь возможность индексировать, как если бы я использовал другие свойства мультиполя?

1 Ответ

1 голос
/ 18 апреля 2019

Второй подход является правильным (то есть с путем внутри контекста), но вам нужно установить поле user_id как keyword, и оно будет работать:

{
    "mappings": {
      "_doc" :{
        "properties" : {
            "username" : {
                "type": "keyword",
                "fields": {
                  "suggest" : {
                    "type" : "completion",
                    "contexts": [
                      { 
                        "name": "user_id",
                        "type": "category",
                        "path": "user_id",
                      }
                    ]
                  }
                }
            },
            "user_id": {
              "type": "keyword"         <--- change this
            }
        }
      }
    }
}

ТогдаВы можете проиндексировать документ без создания дополнительного поля, например:

PUT usernames/_doc/1
{
  "username" : "JOHN",
  "user_id": "1"                        <--- wrap in double quotes
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...