当前位置: 首页 > 面试题库 >

如何在Elasticsearch提示器中使用Logstash导入CSV数据以完成字段类型

广昊昊
2023-03-14
问题内容

ElasticSearch索引创建

curl -XPOST 'http://localhost:9200/music/' -d '{}'

场图

curl -XPUT 'http://localhost:9200/music/_mapping/song' -d '
{
  "properties": {
    "name" : {
      "type" : "string"
    },
    "suggest": {
      "type" : "completion"
    }
  }
}'

LogStash配置文件musicStash.config

input {
    file {
        path => "pathToCsv"
        start_position => beginning
    }
}

filter {  
    csv {
        columns => ["id", "name", "suggest"]
        separator => ","
    }
}

output {
    elasticsearch {
        hosts => "localhost"
        index => "music"
        document_id => "%{id}"
    }
}

现在,在执行logstash配置文件时,在elasticsearch控制台中收到以下异常

failed to put mappings on indices [[music]], type [logs]
java.lang.IllegalArgumentException: Mapper for [suggest] conflicts with existing mapping in other types:
[mapper [suggest] cannot be changed from type [completion] to [string]]
at org.elasticsearch.index.mapper.FieldTypeLookup.checkCompatibility(FieldTypeLookup.java:117)

在Logstash控制台中收到错误,

response=>{"index"=>{"_index"=>"music", "_type"=>"logs", "_id"=>"5", "status"=>400, 
"error"=>{"type"=>"illegal_argument_exception", 
"reason"=>"Mapper for [suggest] conflicts with existing mapping in other types:\n[mapper [suggest] cannot be changed from type [completion] to [string]]"}}}, :level=>:warn}

那么如何通过Logstash导入csv文件来实现elasticsearch自动完成功能。


问题答案:

您在elasticsearch输出中缺少以下设置:

document_type => "song"

发生的是,logstash创建了一个新类型logs(默认情况下),并且由于从ES 2.0版本开始,它被禁止在同一个索引中包含两个具有相同名称但不同类型(stringvs
completion)的字段,因此会出错。

只需像这样修改您的输出,它将起作用:

output {
    elasticsearch {
        hosts => "localhost"
        index => "music"
        document_type => "song"
        document_id => "%{id}"
    }
}


 类似资料:
  • 问题内容: 如何使用Logstash将数据从Elasticsearch导出到CSV?我只需要包括特定的列。 问题答案: 安装2个插件:elasticsearch输入插件和csv输出插件。然后创建一个配置文件。这是这种情况的一个很好的例子。 您现在就可以开始了,只需运行: 并检查中指定的文件。

  • 问题内容: 以下是我正在使用的最新版本的logstash和elasticsearch的问题的可复制示例。 我正在使用logstash将来自csv的地理空间数据作为geo_points输入到elasticsearch。 CSV如下所示: 我创建了一个映射模板,如下所示: 并有一个logstash配置文件,如下所示: 然后运行以下命令: 但是,当查看索引base_map_simple时,它表明文档中没

  • 你能帮我做一下ElasticSearch吗?建议:https://www.elastic.co/guide/en/ElasticSearch/reference/5.1/search-suggesters-completion.html 我在ES索引中创建了类型 curl-xput“localhost:9200/tass_suggest_test/_mapping/company?pretty”-

  • 问题内容: 我们在csv文件中提供了来自外部来源的数据,如下所示: 数据在一个列中并且在另一列中-我需要通过将这两列组合在一起来生成时间戳。 我正在使用logstash中的以下配置从文件读取以上数据-这将生成自己的时间戳: 如何使as作为组合? 问题答案: 使用mutate过滤器将OrderDate和BusinessMinute字段组合为单个(临时)字段,然后使用日期过滤器,如果成功,则将其删除。

  • 问题内容: 我对Elasticsearch还是很陌生,目前正试图在分析仪方面着手研究 我有一个这样的地方列表: London The London Eye The London Dungeon etc… 通过将完成提示的映射设置为以下内容: 现在,当建议者文本输入只是字母时,我就可以返回上述所有三个建议 但是,我希望在用户键入单词时返回,并且在用户键入时也返回(当然,这些术语的任何前缀) 在今天的

  • 我试图通过根据场值提升_score来摆脱弹性搜索中的排序。这是我的场景: 我的文档中有一个字段:应用日期。这是自EPOC以来经过的时间。我希望具有更大应用日期(最近)的记录具有更高的分数。 如果两个文档的分数相同,我想在另一个字符串类型的字段上对它们进行排序。说“状态”是另一个可以有值的字段(可用、进行中、关闭)。所以,具有相同应用程序日期的文档应该根据状态_score。可用应该有更多的分数,进行