У меня есть установка ElasticSearch, получающая данные для индексации через реку CouchDB. У меня проблема в том, что большинство полей в документах CouchDB фактически не имеют отношения к поиску: это поля, используемые приложением (ID и т.д.), и я не хочу получать ложные срабатывания из-за этих полей. Кроме того, индексирование ненужных данных кажется мне пустой тратой ресурсов".
Чтобы решить эту проблему, я определил связку, в которой я указываю поля, которые я хочу индексировать. Я использую pyes для доступа к ElasticSearch. Процесс, которому я следую, следующий:
Это определение индекса, полученное с помощью:
curl -XGET http://localhost:9200/notes_index/_mapping?pretty=true
{
"notes_index" : {
"default_mapping" : {
"properties" : {
"note_text" : {
"type" : "string"
}
}
},
"couchdb" : {
"properties" : {
"_rev" : {
"type" : "string"
},
"created_at_date" : {
"format" : "dateOptionalTime",
"type" : "date"
},
"note_text" : {
"type" : "string"
},
"organization_id" : {
"type" : "long"
},
"user_id" : {
"type" : "long"
},
"created_at_time" : {
"type" : "long"
}
}
}
}
}
Проблема, которая у меня возникла, многогранна:
Есть ли у вас какие-нибудь советы по этому поводу?
Вот что я делаю на самом деле, в точности как напечатано:
server="localhost"
# Create the index
curl -XPUT "$server:9200/index1"
# Create the mapping
curl -XPUT "$server:9200/index1/mapping1/_mapping" -d '
{
"type1" : {
"properties" : {
"note_text" : {"type" : "string", "store" : "no"}
}
}
}
'
# Configure the river
curl -XPUT "$server:9200/_river/river1/_meta" -d '{
"type" : "couchdb",
"couchdb" : {
"host" : "localhost",
"port" : 5984,
"user" : "admin",
"password" : "admin",
"db" : "notes"
},
"index" : {
"index" : "index1",
"type" : "type1"
}
}'
Документы в index1 все еще содержат поля, отличные от "note_text", которое является единственным, которое я специально упомянул в определении связки. Почему так?