У меня есть настройка ElasticSearch, получающая данные для индексации через реку CouchDB. У меня проблема с тем, что большинство полей в документах CouchDB фактически не имеют отношения к поиску: они являются внутренними полями приложения (идентификаторы и т. Д.), И я не хочу получать ложные срабатывания из-за этих полей. Кроме того, индексирование ненужных данных кажется мне пустой тратой ресурсов.ElasticSearch: индексируйте только поля, указанные в сопоставлении
Чтобы решить эту проблему, я определил отображение, в котором я указываю поля, которые я хочу проиндексировать. Я использую pyes для доступа к ElasticSearch. Процесс, за которым я следую, следующий:
- Создайте реку CouchDB, связанную с индексом. Это, по-видимому, создает также индекс и создает в этом индексе «couchdb», которое, насколько я вижу, включает все поля с динамически назначенными типами.
- Поместите сопоставление, переставив его в поля, которые я действительно хочу индексировать.
Это определение индекса, как получено:
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"
}
}
}
}
}
Проблема, что у меня есть это много раз:
- , что «CouchDB» отображение по умолчанию индексирует все поля. Я не хочу это. Можно ли избежать создания этого сопоставления? Я смущен, потому что это сопоставление, похоже, является тем, что каким-то образом «соединяется» с рекой CouchDB.
- отображение, что я создаю, кажется, не имеет никакого эффекта: не существует каких-либо документов, индексированные, что отображение
Есть ли у вас какие-либо рекомендации по этому вопросу?
EDIT
Это то, что я на самом деле делает, точно как прописано:
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» поля, которое является только один, что я конкретно упомянуты в определении отображения. Почему это?
Спасибо за ваш комментарий, но что-то неясно. Где я могу использовать мое сопоставление (я назвал его 'default_mapping') в этом запросе PUT? – dangonfast
У вас есть одно сопоставление на индекс, но вы можете иметь несколько «типов», объявленных в каждом сопоставлении. Я не был уверен, какой тип отображения вы намереваетесь использовать - у вас есть два из них: 'couchdb' и' default_mapping'. Просто измените значение для ключа 'type' в конфигурации рек. –
Я отредактировал исходный вопрос, показывая фактические запросы POST, которые я делаю для настройки ES. Это все еще не работает: все поля по-прежнему индексируются. – dangonfast