回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在elasticsearch中有这个映射</p>
<pre><code>"mappings": {
"properties": {
"fromCoordinates": {"type": "geo_point"},
"toCoordinates": {"type": "geo_point"},
"seenCoordinates": {"type": "geo_point"},
}
}
</code></pre>
<p>使用kibana的控制台,geo_ip<a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/geo-point.html" rel="nofollow noreferrer">fields supported by elasticsearch</a>的所有可能组合都没有问题,即:</p>
<p>(纬度,经度)</p>
<pre><code>PUT /anindex/_doc/1
{
"fromCoordinates": {
"lat": 36.857200622558594
"lon": 117.21600341796875,
},
"toCoordinates": {
"lat": 22.639299392700195
"lon": 113.81099700927734,
},
"seenCoordinates": {
"lat": 36.91663
"lon": 117.216,
}
}
</code></pre>
<p>(长,宽)</p>
<pre><code>PUT /anindex/_doc/2
{
"fromCoordinates": [36.857200622558594, 117.21600341796875],
"toCoordinates": [22.639299392700195, 113.81099700927734],
"seenCoordinates": [36.91663, 117.216]
}
</code></pre>
<p>但是,我尝试通过python将数据插入elasticsearch,我总是出现以下错误:</p>
<pre><code>RequestError(400, 'illegal_argument_exception', 'mapper [fromCoordinates] of different type, current_type [geo_point], merged_type [ObjectMapper]')
</code></pre>
<p>在python中,我从字典构造json,这是我打印时的结果:</p>
<pre><code>fromCoordinates = {}
fromCoordinates['lat'] = fromLat
fromCoordinates['lon'] = fromLon
dataDictionary.update({'fromCoordinates': fromCoordinates , 'toCoordinates': toCoordinates, 'seenCoordinates': seenCoordinates})
</code></pre>
<pre><code>print(json.dumps(dataDictionary).encode('utf-8'))
</code></pre>
<pre><code>{"fromCoordinates": {"lat": 43.9962005615, "lon": 125.684997559},
"toCoordinates": {"lat": 40.080101013183594, "lon": 116.58499908447266},
"seenCoordinates": {"lat": 33.62672, "lon": 109.37243}}
</code></pre>
<p>然后装上这个</p>
<pre><code>data = json.dumps(dataDictionary).encode('utf-8')
es.create(index='anindex', doc_type='document', id=0, body=data)
</code></pre>
<p>阵列版本存在相同的问题:</p>
<pre><code>fromCoordinates = [fromLon, fromLat]
</code></pre>
<p>这是用python创建和打印的json:</p>
<pre><code>{"fromCoordinates": [113.81099700927734, 22.639299392700195],
"toCoordinates": [106.8010025024414, 26.53849983215332],
"seenCoordinates": [107.46743, 26.34169]}
</code></pre>
<p>在这种情况下,我有这样的反应</p>
<pre><code>RequestError: RequestError(400, 'mapper_parsing_exception', 'geo_point expected')
</code></pre>
<p>如果我尝试将StreamSet设置为elasticsearch,则会出现相同的错误,前面显示了两种类型的json:</p>
<pre><code>mapper [fromCoordinates] of different type, current_type [geo_point], merged_type [ObjectMapper]
</code></pre>
<p>有什么想法吗</p>
<p><strong>更新:</strong></p>
<pre><code>GET /anindex/_mapping
</code></pre>
<pre><code>{ "anindex" :
{ "mappings" :
{ "properties" :
{ "fromCoordinates" :
{ "type" : "geo_point" },
"toCoordinates" :
{ "type" : "geo_point" },
"seenCoordinates" : { "type" : "geo_point" }
}
}
}
}
</code></pre>
<p><strong>解决方案:</strong></p>
<p>在@jzzfs给出的示例之后,我意识到<code>es.create(index='anindex', doc_type='document', id=0, body=data)</code>中的doc_type参数导致了错误,我删除了它,它工作了。。。。。但我仍然想知道为什么在Streamset中有相同的错误。。。但我会继续讲python</p>