elasticsearch_dsl/search/response/
hit.rs1use super::{Explanation, NestedIdentity, Source};
2use crate::{util::ShouldSkip, InnerHitsResult, Map};
3use serde::de::DeserializeOwned;
4use serde_json::Value;
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
8pub struct Hit {
9 #[serde(
11 skip_serializing_if = "ShouldSkip::should_skip",
12 rename = "_explanation"
13 )]
14 pub explanation: Option<Explanation>,
15
16 #[serde(
18 default,
19 skip_serializing_if = "ShouldSkip::should_skip",
20 rename = "_index"
21 )]
22 pub index: String,
23
24 #[serde(
26 default,
27 skip_serializing_if = "ShouldSkip::should_skip",
28 rename = "_id"
29 )]
30 pub id: String,
31
32 #[serde(skip_serializing_if = "ShouldSkip::should_skip", rename = "_score")]
35 pub score: Option<f32>,
36
37 #[serde(skip_serializing_if = "ShouldSkip::should_skip", rename = "_nested")]
39 pub nested: Option<NestedIdentity>,
40
41 #[serde(
43 skip_serializing_if = "ShouldSkip::should_skip",
44 rename = "_source",
45 default
46 )]
47 pub source: Source,
48
49 #[serde(skip_serializing_if = "ShouldSkip::should_skip", default)]
51 pub highlight: Map<String, Vec<String>>,
52
53 #[serde(skip_serializing_if = "ShouldSkip::should_skip", default)]
55 pub inner_hits: Map<String, InnerHitsResult>,
56
57 #[serde(skip_serializing_if = "ShouldSkip::should_skip", default)]
59 pub matched_queries: Vec<String>,
60
61 #[serde(skip_serializing_if = "ShouldSkip::should_skip", default)]
63 pub sort: Vec<Value>,
64
65 #[serde(skip_serializing_if = "ShouldSkip::should_skip", default)]
67 pub fields: Map<String, Value>,
68}
69
70impl Hit {
71 pub fn source<T>(&self) -> Result<T, serde_json::Error>
73 where
74 T: DeserializeOwned,
75 {
76 self.source.parse()
77 }
78}