这可能是我要尝试的真正特殊的事情。我正在运行“河流”以动态索引我的ouchdb中的所有数据。
当多个用户将数据输入系统时,有时会在映射(MapperParser Error)中发生冲突。例如:

  • 用户添加以下数据-{"tweet" : {"fooval" : "1"}}-elasticSearch为此tweet.fooval变量创建一个Mapping为数字(因为它将其解释为数字)
  • userB 添加以下数据-{"tweet" : {"fooval" : "false"}}-elasticSearch尝试为此tweet.fooval变量创建一个映射,分别为 bool(boolean) (因为它将其解释为 bool(boolean) 值)和,因此创建MapperParser错误

  • 我想你看到了问题。另外,我只想在标量类型级别执行此操作,因为我不希望将数组/对象视为字符串。我希望在创建映射时将所有标量类型都视为字符串。

    我在文档页面或论坛上找不到任何内容,因此,我会在这里询问指导/指针。

    最佳答案

    首先,默认情况下,elasticsearch不解析字符串。因此,如果您将以下JSON传递给elasticsearch:{"tweet": {"fooval": "1"}},它将tweet.fooval视为字符串。如果elaticsearch正在解析字符串,请确保在mapping中将numeric_detectiondate_detection设置为false。

    另一方面,如果elasticsearch收到一个像JSONt这样的值作为JSON数字:{"tweet": {"fooval": 1}},elasticsearch确实会将此类字段映射为long或double。您可以使用dynamic_templates覆盖此行为。这是一个例子:

    curl -XPUT localhost:9200/test-idx -d '{
        "settings": {
            "index.number_of_replicas": 0,
            "index.number_of_shards": 1
        },
        "mappings": {
            "doc": {
                "dynamic_templates" : [
                    {
                        "template_obj" : {
                            "match" : "*",
                            "match_mapping_type" : "object",
                            "mapping" : {
                                "type" : "object"
                            }
                        }
                    },
                    {
                        "template_str" : {
                            "match" : "*",
                            "mapping" : {
                                "type" : "string"
                            }
                        }
                    }
                ]
            }
        }
    }'
    curl -XPUT localhost:9200/test-idx/doc/1 -d '{
        "count": 123,
        "sold": false,
        "date": "2009-11-15T14:12:12",
        "price": 12.3,
        "description": {
            "weight":  42.3,
            "size": {
                "lenght": 30,
                "width": 20,
                "hight": 10
            }
        }
    }'
    echo
    curl "localhost:9200/test-idx/doc/_mapping?pretty=true"
    

    07-24 13:06