在node.js中将include_type_name参数设置为true

时间:2019-08-02 10:55:39

标签: node.js mongodb elasticsearch mapping mongoosastic

我正在尝试在MongoDB和elasticsearch之间创建映射。我正在用monososastic。当我尝试创建新的映射时,会出现以下错误。

对于解决方案,我在https://github.com/mongoosastic/mongoosastic/blob/master/lib/mongoosastic.js上添加了select

?Finclude_type_name=true
  

响应:   '{“错误”:{“ root_cause”:[{“类型”:“ illegal_argument_exception”,“原因”:“类型   不能在放置映射请求中提供,除非   include_type_name参数设置为   true。“}],” type“:” illegal_argument_exception“,” reason“:”类型不能为   在放置映射请求中提供,除非include_type_name   参数设置为true。“},”状态“:400}',

我不知道如何在node.js / mongoosastic

中添加 include_type_name 参数设置为 true

这是我的代码

function createMappingIfNotPresent (options, cb) {
    const client = options.client;
    const indexName = options.indexName;
    const typeName = options.typeName+"?Finclude_type_name=true";
    const schema = options.schema;
    const settings = options.settings;
    const properties = options.properties;

我有https://github.com/mongoosastic/mongoosastic/blob/master/example/blog/app.js听代码。我是node.js,MongoDB,elasticsearch中的新手。

我有一个MongoDB数据库,我正在尝试使用elasticsearch进行映射。如果要在MongoDB上添加数据,我想将两者都加入,那么它将自动添加到elasticsearch DB上。我只想使用elasticsearch搜索数据,否则我将使用MongoDB。

1 个答案:

答案 0 :(得分:0)

我认为您不能将参数直接添加到typeName中。如果您从elasticsearch javascript客户端检查代码,您会发现它对您的类型名进行了编码,以逃避这些URI字符:Link here。您在参数中的?将被编码,使其成为该类型的一部分。

我还没有验证这一点,但是从elasticsearch-js读取代码后,我就映射了函数,我想您可能想尝试一下:

  ...
  return client.indices.putMapping({
    index: indexName,
    type: typeName,
    body: completeMapping,
    includeTypeName: true // Add parameter for your put mapping.
  }, (err) => {
    cb(err, completeMapping[typeName])
  })
  ...