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

如果文档的字段映射不匹配,Elasticsearch静默失败

孟永望
2023-03-14
问题内容

我面临着Elasticsearch的一个怪异问题。我的映射指定某个字段的类型为long。现在我不小心试图索引一些具有string该字段类型而不是的文档long。我没有从Elasticsearch得到任何错误,但从未对文档建立索引。当我解决此问题时,文件被索引就好了。

例:

我的映射:

{
    "field1": {
        "type": "long"
    }
}

当我发送此文档时,它会静默失败:

 {
     "field1": "this is a string"
 }

当我发送此消息时,它按预期工作:

 {
     "field1": 12345
 }

有没有办法检测这种错误?


问题答案:

如果将ignore_malformed 字符串设置为false。如果文档格式不正确,但会引发异常,则不会索引该文档。至少在elasticsearch 1.6.0中。

例:

put test

put test/test/_mapping 
{
    "properties" : {
        "title" : {"type" : "string"},
        "data" : {"type": "long" ,"ignore_malformed":false}

    }
}

put test/test/1
{
    "data" : "1",
    "title" : "valid coerce string to number"
}

put test/test/2
{
    "data" : "hello",
    "title" : "invalid number"
}

#Failed Response
{
   "error": "MapperParsingException[failed to parse [data]]; nested: NumberFormatException[For input string: \"hello\"]; ",
   "status": 400
}

Query with Get fails

get test/test/2


{
   "_index": "test",
   "_type": "test",
   "_id": "2",
   "found": false
}


 类似资料:
  • 问题内容: 我有一个与此类似的文件: 我要查询以查找所有包含“ a”的人(鲍勃和玛丽)。如何编写查询? 编辑: 当前查询: 问题答案: 在字段上使用术语过滤器/查询(例如)可以满足您的需求。假设您只想匹配满足该条件的任何文档,则完整查询将类似于: 之所以可行,是因为值数组是分别索引的,并且如果查询的字段是列表,则术语查询将查找包含包含该值的数组的文档。

  • 我正在索引一个产品名'T恤‘。我的分析器会中断not-shirt'=>not'、'shirt'、'tshirt'。我正在使用带有catenate_words和空白标记器的WordDelimiterFilter。但我不希望搜索在查询'shirt'时呈现not-shirts',它确实这样做了。谢谢

  • ES5.5文档给出了一个大容量索引的明确示例: 但它也说 endpoint为/_bulk、/{index}/_bulk和{index}/{type}/_bulk。当提供了索引或索引/类型时,默认情况下将在未显式提供它们的批量项上使用它们。 但我不能让这一切奏效。 > 我尝试了/myindex/bulkendpoint,但元数据中没有指定类型。 我在指定了“_type”:“_default_”的情况

  • 我有一个带有标准分析器的弹性搜索集群。我知道使用这个分析仪,术语“300”被分析为一种类型。 假设我正在搜索一个具有字段“name”的文档,该字段的值为“纸巾300 CT”,分析为[“Paper”(ALPHANUM)、“tower”(ALPHANUM)、“300”(NUM)、“CT”(ALPHANUM)] 目前,当我使用模糊/通配符查询时,如下所示: 无论模糊性如何调整,模糊查询都不匹配。我希望术

  • 问题内容: 我想获取与“ statusCode”不匹配的结果:200 为了匹配字段中的文本,您可以使用 我尝试过这样的事情: 根据:https : //www.elastic.co/guide/zh- CN/elasticsearch/reference/current/query-dsl-bool- query.html 问题答案: 试试这个

  • 我希望得到与“StatusCode”不匹配的结果:200 为了匹配您使用的字段中的文本 我试过这样的方法: 根据:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html