Mam konfigurację ElasticSearch, odbierając dane do indeksu za pośrednictwem rzeki CouchDB. Mam problem z tym, że większość pól w dokumentach CouchDB nie ma znaczenia dla wyszukiwania: są to pola używane wewnętrznie przez aplikację (identyfikatory i tym podobne) i nie chcę otrzymywać fałszywych alarmów z powodu tych pól. Poza tym indeksowanie niepotrzebnych danych wydaje mi się marnowaniem zasobów.ElasticSearch: Indeksuj tylko pola określone w mapowaniu
Aby rozwiązać ten problem, zdefiniowałem mapowanie, w którym określam pola, które chcę zindeksować. Używam pyes, aby uzyskać dostęp do ElasticSearch. Proces, który obserwuję, to:
- Utwórz rzekę CouchDB, powiązaną z indeksem. To najwyraźniej tworzy także indeks i tworzy mapowanie "couchdb" w tym indeksie, które, o ile widzę, obejmuje wszystkie pola, z dynamicznie przypisanymi typami.
- Umieść mapowanie, ograniczając je do pól, które naprawdę chcę indeksować.
Jest to definicja indeksu otrzymany przez:
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"
}
}
}
}
}
Problem, który mam jest on wielokrotnie:
- że domyślna "couchdb" mapowanie indeksowanie wszystkich pól. Nie chcę tego. Czy można uniknąć tworzenia tego mapowania? Jestem zdezorientowany, ponieważ to odwzorowanie wydaje się być tym, które w jakiś sposób "łączy" się z rzeką CouchDB.
- odwzorowanie że tworzę wydaje się nie mieć żadnego wpływu: nie istnieją żadne dokumenty indeksowane przez tego mapowania
Czy masz jakieś rady w tej sprawie?
EDIT
To co ja właściwie robi, dokładnie tak, jak wpisane:
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"
}
}'
Dokumenty w index1 nadal zawierają pola inne niż „note_text”, który jest tylko jeden że ja zostały wyraźnie wymienione w definicji mapowania. Dlaczego?
Dzięki za komentarz, ale coś jest niejasne. Gdzie mogę użyć mojego mapowania (nazwałem go 'default_mapping') w tym żądaniu PUT? – dangonfast
Masz jedno mapowanie na indeks, ale możesz mieć wiele "typów" zadeklarowanych w każdym mapowaniu. Nie byłem pewien, jakiego typu odwzorowania zamierzałeś użyć - masz dwa z nich: 'couchdb' i' default_mapping'. Po prostu zmień wartość dla klucza 'type' w konfiguracji rzeki. –
Mam edytowane oryginalne pytanie, pokazujące teraz aktualne żądania POST, które robię, aby skonfigurować ES. To nadal nie działa: wszystkie pola są nadal indeksowane. – dangonfast