Сложный документ - обеспечьте отображение только для нескольких полей, но оставьте все как есть - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть несколько довольно сложных документов, которые я хочу сохранить в эластичном, чтобы получить их и сделать их доступными для поиска.Я не знаю всей структуры данных, поэтому я хотел бы, чтобы эластичный «глотал» все, как я его ввел, но определил некоторые индексированные поля, чтобы сделать поиск возможным.

Как только я предоставлю сопоставление для эластичногоя получу ошибки, если я не определю отображения, я боюсь, что индекс будет слишком большим, потому что упругость будет индексировать слишком много.

Я создаю индекс, используя php, но он сводится к следующему:

PUT localhost:9200/name-of-index

{
    "mappings": {
        "_doc": {
            "properties": {
                "title": {
                    "type": "text"
                }
            }
        }
    }
}

Затем - когда я добавляю один объект для проверки всего, я получаю следующую ошибку:

status 400

{
    "error": {
        "root_cause": [
            {
                "type": "illegal_argument_exception",
                "reason": "Rejecting mapping update to [name-of-index] as the final mapping would have more than 1 type: [_doc, 2187]"
            }
        ],
        "type": "illegal_argument_exception",
        "reason": "Rejecting mapping update to [name-of-index] as the final mapping would have more than 1 type: [_doc, 2187]"
    },
    "status": 400
}

Команда, которую я использую для публикации документа, примерно такова:

POST localhost:9200/name-of-index/2187

{
    "title": "some title",
    "otherField": "other value",
    "obj": {
        "nestedProp": "nestedValue",
        "deepObj": {
            "someStorage": [
                ...
                {
                    "someVeryDeepProp": 1
                }
                ...                
            ]            
        }
    },
    "obj2": [
        "str1",
        "str2"
    ]
}

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

Так как я могу определить частичный индекс и сохранить все остальное как есть?

обновление: я забыл некоторую упругую информацию ..

{
  "name" : "KNJ_3Eg",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "4M9p8XiaQHKPz7N2AAuVlw",
  "version" : {
    "number" : "6.6.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "a9861f4",
    "build_date" : "2019-01-24T11:27:09.439740Z",
    "build_snapshot" : false,
    "lucene_version" : "7.6.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

1 Ответ

0 голосов
/ 07 февраля 2019

Хорошо, это была просто глупая ошибка, я забыл добавить тип.

Итак, правильный запрос на добавление документа должен быть:

POST localhost:9200/name-of-index/_doc/2187

{
    "title": "some title",
    "otherField": "other value",
    "obj": {
        "nestedProp": "nestedValue",
        "deepObj": {
            "someStorage": [
                ...
                {
                    "someVeryDeepProp": 1
                }
                ...                
            ]            
        }
    },
    "obj2": [
        "str1",
        "str2"
    ]
}

Я думаю, из версии 7далее это будет без "_doc", потому что типы обычно устарели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...