Używam elasticsearch do indeksowania moich dokumentów.
Czy można poinstruować, aby zwracał tylko określone pola zamiast całego zapisanego dokumentu json?
elasticsearch
użytkownik1199438
źródło
źródło
Odpowiedzi:
Tak! Użyj filtra źródłowego . Jeśli szukasz w JSON, będzie wyglądać mniej więcej tak:
W ES 2.4 i wcześniejszych można również użyć opcji pól w interfejsie API wyszukiwania :
Jest to przestarzałe w ES 5+. A filtry źródłowe i tak są potężniejsze!
źródło
Uważam, że dokumenty
get api
są pomocne - szczególnie dwie sekcje, Filtrowanie źródeł i Pola : https://www.elastic.co/guide/en/elasticsearch/reference/7.3/docs-get.html#get-source- filtracjaMówią o filtrowaniu źródeł:
Które idealnie pasowały do mojego przypadku użycia. Skończyło się na tym, że tak po prostu przefiltrowałem źródło (używając skrótu):
Do Twojej wiadomości w dokumentach podają parametr parametr pola :
Wydaje się, że obsługuje pola, które zostały specjalnie zapisane, gdzie umieszcza każde pole w tablicy. Jeśli określone pola nie zostaną zapisane, pobierze każde z _source, co może spowodować „wolniejsze” pobieranie. Miałem również problemy z uzyskaniem go, aby zwracał pola typu obiektu.
Podsumowując, masz dwie opcje: filtrowanie źródła lub pola [przechowywane].
źródło
źródło
W Elasticsearch 5.x powyższe podejście jest przestarzałe. Możesz użyć metody _source, ale w niektórych sytuacjach sensowne jest przechowywanie pola. Na przykład, jeśli masz dokument z tytułem, datą i bardzo dużym polem zawartości, możesz pobrać tylko tytuł i datę bez konieczności wyodrębniania tych pól z dużego pola _source:
W takim przypadku użyłbyś:
Zobacz dokumentację dotyczącą sposobu indeksowania przechowywanych pól. Zawsze chętny na upvote!
źródło
źródło
filtrowanie odpowiedzi
https://stackoverflow.com/a/35647027/844700
źródło
Filtrowanie źródła
Pozwala kontrolować sposób zwracania pola _source przy każdym trafieniu.
Słowo kluczowe „zawiera” określa pola szczegółowe.
źródło
Żądanie GET API REST można wykonać za pomocą parametru „_source”.
Przykładowe zapytanie
Odpowiedź
}
źródło
Tak, korzystając z filtru źródłowego, możesz to zrobić, oto filtrowanie źródłowe dokumentów
Przykładowe zapytanie
Wyjście będzie
źródło
W Javie możesz użyć setFetchSource w następujący sposób:
źródło
Na przykład masz dokument z trzema polami:
Jeśli chcesz wrócić
name
iscore
możesz użyć następującego polecenia:Jeśli chcesz uzyskać pola pasujące do wzorca:
Może wykluczyć niektóre pola:
źródło
Korzystając z Java API, używam następujących elementów, aby uzyskać wszystkie rekordy z zestawu określonych pól:
źródło