1

これは、私がやろうとしている本当に奇妙なことかもしれません。「リバー」を実行して、couchdb 内のすべてのデータに動的にインデックスを付けています。
複数のユーザーがシステムにデータを入力すると、マッピングに矛盾が生じることがあります ( MapperParser Error)。例えば:

  • userAは次のデータを追加します - -- elasticSearch は、こ​​の変数{"tweet" : {"fooval" : "1"}} のマッピングを数値として作成します(数値として解釈するため)。tweet.fooval
  • userBは次のデータを追加します。 -- elasticSearch は、こ​​の変数{"tweet" : {"fooval" : "false"}} のマッピングをブール値(ブール値として解釈するため) として作成しようとするため、 MapperParser エラーが発生します。tweet.fooval

私はあなたが問題を見ていると思います。また、配列/オブジェクトを文字列として扱いたくないため、スカラー型のレベルでのみ実行したいと考えています。マッピングが作成されている間、すべてのスカラー型を文字列として扱いたいと思います。

ドキュメントページやフォーラムで何も見つけられなかったので、ここで指示/ポインタを求めます。

4

1 に答える 1

2

まず第一に、デフォルトでは、elasticsearch は文字列を解析していません。したがって、elasticsearch に次の JSON を渡すと、文字列として{"tweet": {"fooval": "1"}}扱わtweet.foovalれます。elaticsearch が文字列を解析している場合は、マッピングnumeric_detectionでとdate_detectionが false に設定されていることを確認してください。

一方、elasticsearch が次のような 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"
于 2013-01-09T01:17:40.963 に答える