gpt4 book ai didi

node.js - 非法参数异常请求包含无法识别的参数: [mapping] - ElasticSearch Index Creation

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:29 25 4
gpt4 key购买 nike

从昨天起我第一次使用elasticsearch,由于我的知识有限,经过两天的工作,我正在努力启动和运行简单的功能。

我的主要目标是使用 Node.js + ElasticSearch 完成任务。现在我不得不使用 mapping 功能创建索引。

我的直接问题是:我必须做什么才能使这段代码正常工作?

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

任何检查内容的建议将不胜感激。

此外,尽管不是我的主要问题的一部分,但任何评论如何正确地将获取和搜索功能返回到 response.send(JSON.stringify(the data from elasticsearch)) 以及如何将 post_date 映射到日期类型而不是字符串将受到赞赏,因为我也陷入困境。

贝娄是我迄今为止所尝试过的。当我尝试不使用mapping功能(如下面的addToIndex)时,我可以看到抛出“Chrome ElastiSearch ToolBox扩展”,它确实可以工作,但我希望有单独的功能,一个用于创建显然我只会运行一次索引,另一个用于创建“记录”,这将成为我的 CRUD 的一部分。

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)

我的 Controller 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"
}
}

最佳答案

根据elasticsearch.js » 5.5 API Doc

client.indices.create([params, [callback]])

Params

  • body

Object, JSON — An optional request body, as either JSON or a JSON serializable object. See the elasticsearch docs for details about what can be specified here.

根据API Convension doc

Generic Parameters

  • body

String, Anything — The body to send along with this request. If the body is a string it will be passed along as is, otherwise it is passed to the serializer and converted to either JSON or a newline separated list of JSON objects based on the API method.

因此,您应该将 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: {
// ...
},
},
}
});

关于node.js - 非法参数异常请求包含无法识别的参数: [mapping] - ElasticSearch Index Creation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42308090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com