自从昨天以来我第一次使用弹性搜索,由于我的知识有限,我在努力工作两天后仍在努力获得简单的功能。
我的主要目标是使用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
功能时,它确实有效,但我希望有单独的功能,一个用于创建索引,我将只运行一次,另一个用于创建&#34 ;记录"这将是我的一部分。
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 :(得分:1)
根据elasticsearch.js » 5.5 API Doc
client.indices.create([params,[callback]])
<强> PARAMS 强>
- 体
Object,JSON - 可选的请求主体,作为JSON或JSON可序列化对象。有关可在此处指定的内容的详细信息,请参阅elasticsearch文档。
通用参数
- 体
String,Anything - 与此请求一起发送的正文。如果正文是一个字符串,它将按原样传递,否则它将传递给序列化程序并根据API方法转换为JSON或换行符分隔的JSON对象列表。
因此,您应该将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: {
// ...
},
},
}
});
答案 1 :(得分:1)
通用参数
体
任何内容 - 与此请求一起发送的正文。如果正文是一个字符串,它将按原样传递,否则,它将被传递给序列化程序,并根据API方法转换为JSON或新行分隔的JSON对象列表。
在宣布“映射”之前不要忘记添加“正文”
示例:强>
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"
}