2017-02-17 22 views
2

Я использую elasticsearch в первый раз со вчерашнего дня, и я изо всех сил пытаюсь получить простые функции и работать после двух дней работы над этим из-за моих ограниченных знаний ,неавторизованный параметр содержит непризнанный параметр: [mapping] - Создание индекса ElasticSearch

Моя основная цель - выполнить крафт с помощью NodeJs + ElasticSearch. Теперь я застрял, чтобы создать индекс, используя функцию «mapping».

Мой прямой вопрос: что мне нужно сделать, чтобы этот код работал?

return client.indices.create({ 
      index: 'index_created_with_map', 
      mapping: { 
       posts: { 
        user: { 
         type: 'string' 
        }, 
        post_date: { 
         type: 'string' 
        }, 
        message: { 
         type: 'string' 
        } 
       } 
      } 
     }); 

Любое предложение, что проверить будет оценено.

Плюс, что, хотя и не является частью моего основного вопроса, любой комментарий, как правильно вернуть функцию get и search в «response.send (JSON.stringify (данные из elasticsearch))» и как сопоставить «post_date», тип даты вместо строки будет оценен по мере того, как я застрял на нем.

Пыльник - это все, что я пробовал до сих пор. Я вижу бросок «Расширение Chrome ElastiSearch ToolBox», когда я пытаюсь без функции «сопоставления», например, в addToIndex ниже, чем он работает, но я хотел бы иметь отдельные функции, один для создания индекса, который я буду запускать сразу один раз, а другой для создания «запись», которая будет частью моей сыпи.

PS. Я нашел очень подобный вопрос здесь без ответа

illegal_argument_exception: no mapping found for field

журнал ошибок:

Unhandled rejection Error: [illegal_argument_exception] request [/index_created_with_map] contains unrecognized parameter: [mapping] 
    at respond (/home/demetrio/dev/WSs/NodeJs/greencard-dmz-es-oracle/node_modules/elasticsearch/src/lib/transport.js:289:15) 
    at checkRespForFailure (/home/demetrio/dev/WSs/NodeJs/greencard-dmz-es-oracle/node_modules/elasticsearch/src/lib/transport.js:248:7) 
    at HttpConnector.<anonymous> (/home/demetrio/dev/WSs/NodeJs/greencard-dmz-es-oracle/node_modules/elasticsearch/src/lib/connectors/http.js:164:7) 
    at IncomingMessage.wrapper (/home/demetrio/dev/WSs/NodeJs/greencard-dmz-es-oracle/node_modules/lodash/lodash.js:4968:19) 
    at emitNone (events.js:72:20) 
    at IncomingMessage.emit (events.js:166:7) 
    at endReadableNT (_stream_readable.js:905:12) 
    at nextTickCallbackWith2Args (node.js:441:9) 
    at process._tickCallback (node.js:355:17) 

мой контроллер NodeJs

var elasticsearch = require('elasticsearch'); 
var Promise = require('bluebird'); 

exports.teste = function (req, res) { 

    var log = console.log.bind(console); 

    var client = new elasticsearch.Client({ 
     host: 'localhost:9200', 
     log: 'trace' 
    }); 

    function createIndexWithMapping() { 
     return client.indices.create({ 
      index: 'index_created_with_map', 
      mapping: { 
       posts: { 
        user: { 
         type: 'string' 
        }, 
        post_date: { 
         type: 'string' 
        }, 
        message: { 
         type: 'string' 
        } 
       } 
      } 
     }); 
    } 

    function createIndexWithoutMapping() { 
     return client.create({ 
      index: 'index_created_without_map', 
      type: 'posts', 
      id: '1', 
      body: { 
       user: 'me', 
       post_date: new Date(), 
       message: 'Hello World!' 
      }, 
      refresh: true 
     }); 
    } 

    function addToIndex() { 
     return client.index({ 
      index: 'index_created_...according to the test', 
      type: 'posts', 
      id: '1', 
      body: { 
       user: 'me2', 
       post_date: new Date(), 
       message: 'Hello World!2' 
      }, 
      refresh: true 
     }); 
    } 

    function search() { 
     return client.search({ 
      index: 'index_created_...according to the test', 
      type: 'posts', 
      body: { 
       query: { 
        match: { 
         body: 'Hello' 
        } 
       } 
      } 
     }).then(log); 
    } 

    function getFromIndex() { 
     return client.get({ 
      index: 'index_created_...according to the test', 
      type: 'posts', 
      id: 1 
     }).then(log); 
    } 


    function closeConnection() { 
     client.close(); 
    } 

    Promise.resolve() 
     .then(createIndexWithMapping) 
     //.then(createIndexWithoutMapping) 
     //  .then(addToIndex) 
     // .then(search) 
     // .then(getFromIndex) 
     .then(closeConnection); 

    return res.send("a"); 

}; 

package.json

{ 
    "name": "my-first-elasticsearch-app", 
    "main": "server.js", 
    "dependencies": { 
    "bcrypt-nodejs": "0.0.3", 
    "body-parser": "^1.0.2", 
    "ejs": "^1.0.0", 
    "elasticsearch": "^12.1.3", 
    "express": "^4.1.1", 
    "express-session": "^1.6.1", 
    "mongoose": "^3.8.8", 
    "node-rest-client": "^2.5.0", 
    "oauth2orize": "^1.0.1", 
    "passport": "^0.2.0", 
    "passport-http": "^0.2.2", 
    "passport-http-bearer": "^1.0.1", 
    "reqclient": "^2.1.0" 
    } 
} 
+0

'Promise.resolve () .then (createIndexWithMapping) .... 'выглядит неправильно. Как вы думаете, что вы достигли с помощью этого кода? –

+0

Вы пытались поместить свойство «сопоставления» в свойство «тело», как предлагается здесь? http://stackoverflow.com/a/25456701/2848895 – deathyr

+0

Jaromanda, я понимаю, что создаю индекс. Это мой первый опыт использования ELasticSearch. Как простая аналогия: «Я хочу создать пустую базу данных». PS. Я знаю, что база данных не является правильным термином в ElasticSearch, но вы, вероятно, можете понять, что я хочу делать с этим комментарием. В https://gist.github.com/StephanHoyer/b9cd6cbc4cc93cee8ea6 вы можете увидеть аналогичную идею: «... client.indices.create ({ index: 'test', mapping: { дом: { имя: { Тип: 'строка' ... – DemeCarvO

ответ

0

Согласно elasticsearch.js » 5.5 API Doc

client.indices.create ([PARAMS, [обратного вызова]])

Params

  • тела

объекта, JSON - Необязательный объект запроса, как JSON или JSON-сериализуемый объект. Дополнительную информацию о том, что можно указать здесь, см. В документах elasticsearch.

И Согласно API Convension doc

Generic Параметры

  • тело

Струнные, Все - Тело отправить вместе с этой просьбой. Если тело является строкой, оно будет передаваться как есть, в противном случае оно передается в сериализатор и преобразуется в JSON или в список разделенных новой строки объектов JSON на основе метода API.

Таким образом, вы должны отправить mapping имущество в качестве тела запроса внутри body собственности

рабочий пример:

const es = require('elasticsearch'); 

const elasticsearchClient = new es.Client({ 
    host: 'localhost:9200', 
    log: 'trace', 
}); 

elasticsearchClient.indices.create({ 
    index: `index_created_with_map`, 
    body: { 
     mappings: { 
      type_name: { 
       // ... 
      }, 
     }, 
    } 
}); 
0

Общие параметры

тело

Anything - Тело отправляет вместе с этим запросом. Если тело является строкой, оно будет передаваться как есть, в противном случае оно передается в сериализатор и преобразуется в JSON или в список разделенных новой строки объектов JSON на основе метода API.

Не забудьте добавить "тело", прежде чем объявить "отображения"

Пример:

function createIndices() { 
     return client.indices.create({ 
      index: "indicesName", 
      body: { 
      mappings: { 
       text: { 
       properties: { 
        id: { 
        type: "integer" 
        }, 
        label: { 
        type: "keyword" 
        }, 
        state: { 
        type: "keyword" 
        }, 
        startTime: { 
        type: "date", 
        format: "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd'T'HH:mm:ssZZ" 
        }, 
        updateTime: { 
        type: "date", 
        format: "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd'T'HH:mm:ssZZ" 
        } 
       } 
       } 
      } 
      } 
     }); 
     } 

Выход:

{ 
     "acknowledged": true, 
     "shards_acknowledged": true, 
     "index": "indicesName" 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^