【发布时间】:2017-07-07 13:54:27
【问题描述】:
我从昨天开始第一次使用 elasticsearch,由于我的知识有限,经过两天的努力,我正在努力启动和运行简单的功能。
我的主要目标是使用 Node.js + ElasticSearch 完成一个 crud。现在我坚持使用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(the data from elasticsearch)) 以及如何将 post_date 映射到日期类型而不是字符串将不胜感激,因为我坚持也是。
到目前为止,我已经尝试过以下所有内容。当我尝试不使用mapping 功能时,我可以看到抛出“Chrome ElastiSearch ToolBox 扩展”,就像下面的addToIndex 一样,它确实有效,但我希望有单独的功能,一个用于创建索引,我将只运行一次显然,另一个用于创建“记录”,这将成为我的一部分。
附言。我在这里发现了非常相似的问题,没有任何答案
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"
}
}
【问题讨论】:
-
Promise.resolve().then(createIndexWithMapping) ....看起来不对。你认为你用这段代码实现了什么? -
您是否尝试按照此处的建议将“mappings”属性置于“body”属性中? stackoverflow.com/a/25456701/2848895
-
Jaromanda,我知道我正在创建索引。这是我第一次使用 ELlasticSearch。作为一个简单的类比,“我想创建空数据库”。 PS。我知道数据库在 ElasticSearch 中不是正确的术语,但您可能可以理解我想用这条评论做什么。在gist.github.com/StephanHoyer/b9cd6cbc4cc93cee8ea6 你可以看到类似的想法:“... client.indices.create({ index: 'test', mapping: { house: { name: { type: 'string'...
-
@DemeCarvO,请检查我的答案
标签: node.js elasticsearch npm promise elasticsearch-plugin