2014-12-03 9 views
10

Domyślnie NEST będzie wielbić obiekt sprawy i nazwy właściwości podczas wysyłania obiektu do Elasticsearch w celu zindeksowania. W jaki sposób można wyłączać nazwy pól nazwy pola wielbłąda w dokumentach NEST dla Elasticsearch? Zrobiłem sporo badań i jest mailing list thread na ten temat, ale wydaje się nieaktualne, ponieważ niektóre metody zostały zmienione lub już nie istnieją. Jak wyłączyć obudowę wielbłąda Nazwy pól wyszukiwania elastycznego w NEST?

IConnectionPool connectionPool = new SniffingConnectionPool(m_ElasticsearchNodeUris); 
ConnectionSettings settings = new ConnectionSettings(connectionPool); 
settings.SetDefaultTypeNameInferrer(p => p.Name); //This disables camel casing for object type names 
ElasticClient client = new ElasticClient(settings); 

informacji na liście dyskusyjnej wskazuje ten kod powinien być dodany do obsługi rzeczy dla nazwy pól, ale sposób klient nie wydaje się istnieć:

client.ModifyJsonSerializationSettings(s => s.ContractResolver = new Nest.Resolvers.ElasticResolver(settings); 

Czy ktoś ma wszelkie uaktualnione składnia do obsługi tego? Dzięki.

+0

jak ty chce Opcja 'name' natknąć ..? 'UpperCase, LosweCase ..?' Proszę wyjaśnić .. jeśli nie możesz użyć '.ToUpper() lub ToLower()' na przykład – MethodMan

+0

@DJKRAZE: Nie chcę w ogóle modyfikować nazwy. Kiedy wysyłam obiekt do zaindeksowania, chcę, aby nazwy właściwości obiektu były niezmienione. Uwaga: settings.SetDefaultTypeNameInferrer wpływa tylko na typ obiektu (który jest często interpretowany jako typ dokumentu Elasticsearch, jeśli nie zastąpisz go czymś bardziej szczegółowym podczas budowania zapytania). Ta linia kodu nie ma wpływu na nazwy właściwości obiektu. – Ellesedil

Odpowiedz

13

ConnectionSettings.SetDefaultPropertyNameInferrer() jest tym, czego szukasz. Ta metoda akceptuje funkcję, która pobiera nazwę właściwości i stosuje do niej transformację. Funkcja jest następnie wywoływana w każdej z Twoich właściwości, zanim żądania zostaną wysłane do Elasticsearch.

Jeśli chcesz zachować swoje nazwy właściwości nietknięte, to można to zrobić:

settings.SetDefaultPropertyNameInferrer(p => p)

p => p tu po prostu jest to funkcja, która pobiera ciąg (nazwa nieruchomość) i zwraca ten sam ciąg niemodyfikowany.

+0

Doskonały. Tak więc 'settings.SetDefaultTypeNameInferrer (p => p.Name);' i 'settings.SetDefaultPropertyNameInferrer (p => p);' wyłącza osłonę wielbłąda dla całego obiektu (który byłby typem i nazwami pól w Elasticsearch)? – Ellesedil

+0

To prawda. –

3

W wersji 2.5.0 to:

settings.DefaultFieldNameInferrer(p => p) 
Powiązane problemy