我正在使用 Mongo、Elastic Search 和这条河插件:https ://github.com/richardwilly98/elasticsearch-river-mongodb
我已经成功地设置了所有东西,当更新 Mongo 时,河流会保持 ES 数据的更新,但是河流会直接将 Mongo 文档中的所有属性复制到 ES 中,但我只想要这些记录的一小部分。例如,如果一个 Mongo 文档有 30 个属性,所有这些属性都被放入 ES 而不是只有我想要的 5 个。我认为问题出在映射上,我已经关注了几个文档和另一个 Stack Overflow 线程(curl -X POST -d @mapping.json + mapping not created),但它仍然不适合我。这是我正在做的事情:
我正在创建我的索引:
curl -XPOST "http://localhost:9200/mongoindex" -d @index.json
索引.json:
{
"settings" : {
"number_of_shards" : 1
},
"analysis" : {
"analyzer" : {
"str_search_analyzer" : {
"tokenizer" : "keyword",
"filter" : ["lowercase"]
},
"str_index_analyzer" : {
"tokenizer" : "keyword",
"filter" : ["lowercase", "ngram"]
}
},
"filter" : {
"ngram" : {
"type" : "ngram",
"min_gram" : 2,
"max_gram" : 20
}
}
}
}
然后运行:
curl -XPOST "http://localhost:9200/mongoindex/listing/_mapping" -d @mapping.json
有了这些数据:
{
"listing":{
"properties":{
"_all": {
"enabled": false
},
"title": {
"type": "string",
"store": false,
"index": "not_analyzed"
},
"bathrooms": {
"type": "integer",
"store": true,
"index": "analyzed"
},
"bedrooms": {
"type": "integer",
"store": true,
"index": "analyzed"
},
"address": {
"type": "nested",
"include_in_parent": true,
"store": true,
"properties": {
"counrty": {
"type":"string"
},
"city": {
"type":"string"
},
"stateOrProvince": {
"type":"string"
},
"fullStreetAddress": {
"type":"string"
},
"postalCode": {
"type":"string"
}
}
},
"location": {
"type": "geo_point",
"full_name": "geometry.coordiantes",
"store": true
}
}
}
}
然后最终创建河流:
curl -XPUT "http://localhost:9200/_river/mongoindex/_meta" -d @river.json
河流.json:
{
"type": "mongodb",
"mongodb": {
"db": "blueprint",
"collection": "Listing",
"options": {
"secondary_read_preference": true,
"drop_collection": true
}
},
"index": {
"name": "mongoindex",
"type": "listing"
}
}
毕竟,河流在那个 ES 中工作是填充的,但它现在是 Mongo 的逐字副本,我需要修改映射,但它只是没有生效。我错过了什么?
这就是我的地图在河流流过之后的样子......与我想要的样子完全不同。