Skip to main content

Topic

Struct Topic 

Source
pub struct Topic {
Show 14 fields pub id: String, pub display_name: Option<String>, pub description: Option<String>, pub keywords: Option<Vec<String>>, pub ids: Option<TopicIds>, pub subfield: Option<TopicHierarchyLevel>, pub field: Option<TopicHierarchyLevel>, pub domain: Option<TopicHierarchyLevel>, pub siblings: Option<Vec<TopicSibling>>, pub works_count: Option<i64>, pub cited_by_count: Option<i64>, pub works_api_url: Option<String>, pub updated_date: Option<String>, pub created_date: Option<String>,
}
Expand description

A research topic in OpenAlex’s 3-level topic hierarchy.

Topics are organized as: domain > field > subfield > topic. There are ~4,500 topics. Each topic has an AI-generated description and keywords. Works are assigned up to 3 topics with relevance scores.

§Example

{
  "id": "https://openalex.org/T10001",
  "display_name": "Malaria Control and Epidemiology",
  "description": "This cluster of papers focuses on...",
  "keywords": ["malaria", "plasmodium falciparum", "antimalarial drugs", ...],
  "subfield": {"id": 2725, "display_name": "Infectious Diseases"},
  "field": {"id": 27, "display_name": "Medicine"},
  "domain": {"id": 4, "display_name": "Health Sciences"},
  "works_count": 143562
}

§ID formats

Topics can only be retrieved by OpenAlex ID (T...).

§Note

Within Topic entities, the hierarchy level id fields are integers. When topics appear nested in Work entities, these same fields are strings. The TopicHierarchyLevel::id field uses serde_json::Value to handle this.

Fields§

§id: String

OpenAlex ID URI (e.g. "https://openalex.org/T10001").

§display_name: Option<String>

Human-readable topic name (e.g. "Malaria Control and Epidemiology").

§description: Option<String>

AI-generated description of this research topic.

§keywords: Option<Vec<String>>

Keywords associated with this topic, useful for understanding its scope.

§ids: Option<TopicIds>

External identifiers (OpenAlex, Wikipedia).

§subfield: Option<TopicHierarchyLevel>

The subfield this topic belongs to in the hierarchy.

§field: Option<TopicHierarchyLevel>

The field this topic belongs to in the hierarchy.

§domain: Option<TopicHierarchyLevel>

The domain this topic belongs to in the hierarchy.

§siblings: Option<Vec<TopicSibling>>

Other topics at the same level in the hierarchy (siblings under the same subfield).

§works_count: Option<i64>

Total number of works assigned to this topic.

§cited_by_count: Option<i64>

Total number of citations received by works in this topic.

§works_api_url: Option<String>

API URL to retrieve works in this topic.

§updated_date: Option<String>

ISO 8601 timestamp of the last update to this record.

§created_date: Option<String>

ISO 8601 date when this record was first created.

Trait Implementations§

Source§

impl Clone for Topic

Source§

fn clone(&self) -> Topic

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Topic

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Topic

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<Topic, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl From<Topic> for TopicSummary

Source§

fn from(t: Topic) -> Self

Converts to this type from the input type.
Source§

impl Serialize for Topic

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Topic

§

impl RefUnwindSafe for Topic

§

impl Send for Topic

§

impl Sync for Topic

§

impl Unpin for Topic

§

impl UnsafeUnpin for Topic

§

impl UnwindSafe for Topic

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,