3
{ title: 'abcccc',
  price: 3300,
  price_per: 'task',
  location: { lat: -33.8756, lon: 151.204 },
  description: 'asdfasdf' 
 }

上記は、インデックスを作成する JSON です。ただし、インデックスを作成すると、次のエラーが表示されます。

{"error":"MapperParsingException[Failed to parse [location]]; nested: ElasticSearchIllegalArgumentException[unknown property [lat]]; ","status":400}

「場所」フィールドを削除すると、すべてが機能します。

地域のインデックスを作成するにはどうすればよいですか? 私はチュートリアルを読みましたが、それがどのように機能するのかまだ混乱しています。このように動作するはずですよね...?

4

2 に答える 2

2

フィールドの場所が正しくマップされていないため、このエラー メッセージが表示されます。ある時点で、このフィールドで文字列のインデックスを作成しようとしたことがあり、現在は文字列としてマップされている可能性があります。Elasticsearch は、フィールドに geo_point が含まれていることを自動的に検出できません。マッピングで明示的に指定する必要があります。それ以外の場合、Elasticsearch は、最初のインデックス付きレコードで使用した geo_point 表現のタイプに応じて、文字列、数値、またはオブジェクトなどのフィールドをマップします。フィールドがマッピングに追加されると、そのタイプは変更できなくなります。そのため、状況を修正するには、このタイプのマッピングを削除して、再度作成する必要があります。geo_point フィールドのマッピングを指定する例を次に示します。

curl -XDELETE "localhost:9200/geo-test/"
echo
# Set proper mapping. Elasticsearch cannot automatically detect that something is a geo_point:
curl -XPUT "localhost:9200/geo-test" -d '{
    "settings": {
        "index": {
            "number_of_replicas" : 0,
            "number_of_shards": 1
        }
    },
    "mappings": {
        "doc": {
            "properties": {
                "location" : {
                    "type" : "geo_point"
                }
            }
        }
    }
}'
echo
# Put some test data in Sydney
curl -XPUT "localhost:9200/geo-test/doc/1" -d '{ 
    "title": "abcccc",
    "price": 3300,
    "price_per": "task",
    "location": { "lat": -33.8756, "lon": 151.204 },
    "description": "asdfasdf"
 }'
curl -XPOST "localhost:9200/geo-test/_refresh"
echo
# Search, and calculate distance to Brisbane 
curl -XPOST "localhost:9200/geo-test/doc/_search?pretty=true" -d '{
    "query": {
        "match_all": {}
    },
    "script_fields": {
        "distance": {
            "script": "doc['\''location'\''].arcDistanceInKm(-27.470,153.021)"
        }
    },
    "fields": ["title", "location"]
}
'
echo
于 2013-02-27T01:37:25.627 に答える
-1

解析方法を指定しないため、次のようになります。

不明なプロパティ名を持つJSON.NETでJSONを解析する

光が差し込むかもしれません。

于 2013-02-27T00:38:52.747 に答える