From 025392b12947fd8b2fd15ab4ebf03eac68d3a689d88ec0425a042187e42a1541 Mon Sep 17 00:00:00 2001 From: Alex Wied <2+alex@noreply.code.graphofliberty.org> Date: Sun, 16 Aug 2026 21:42:14 -0400 Subject: [PATCH] . --- graph/src/indexer.rs | 22 ++++++++++++++++++++-- graph/src/vocab.rs | 14 ++++++++++++++ publish/src/main.rs | 3 +-- search/src/schema.rs | 2 ++ 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/graph/src/indexer.rs b/graph/src/indexer.rs index 7d86532..e3e1be6 100644 --- a/graph/src/indexer.rs +++ b/graph/src/indexer.rs @@ -56,6 +56,24 @@ impl<'a> Indexer<'a> { ]) } + fn work(&self, graph: &Graph, subject: NamedNodeRef) -> HashMap { + HashMap::from_iter([ + ( + Schema::field("title", self.language.primary_language()), + self.extract_string(graph, subject, vocab::rdawd::TITLE_OF_WORK), + ), + ]) + } + + fn expression(&self, graph: &Graph, subject: NamedNodeRef) -> HashMap { + HashMap::from_iter([ + ( + Schema::field("title", self.language.primary_language()), + self.extract_string(graph, subject, vocab::rdaed::TITLE_OF_EXPRESSION), + ), + ]) + } + pub fn graph(&self, graph: &Graph) -> crate::Result>> { let mut entities_and_types = HashSet::new(); let triples = graph.triples_for_predicate(vocab::rdf::TYPE); @@ -73,10 +91,10 @@ impl<'a> Indexer<'a> { Class::RdfProperty => None, Class::RdfsClass => None, Class::SkosConcept => None, - Class::Work => Some(self.person(graph, *subject)), + Class::Work => Some(self.work(graph, *subject)), Class::Person => Some(self.person(graph, *subject)), Class::CorporateBody => Some(self.corporate_body(graph, *subject)), - Class::Expression => Some(self.person(graph, *subject)), + Class::Expression => Some(self.expression(graph, *subject)), Class::Manifestation => Some(self.person(graph, *subject)), }.map(|mut document| { document.insert(Schema::discriminant_field(), OwnedValue::from(class as u64)); diff --git a/graph/src/vocab.rs b/graph/src/vocab.rs index 696e1be..9e7173d 100644 --- a/graph/src/vocab.rs +++ b/graph/src/vocab.rs @@ -56,3 +56,17 @@ pub mod rdaad { pub const NAME_OF_CORPORATE_BODY: NamedNodeRef = NamedNodeRef::new_unchecked("http://rdaregistry.info/Elements/a/datatype/P50032"); } + +pub mod rdawd { + use oxigraph::model::NamedNodeRef; + + pub const TITLE_OF_WORK: NamedNodeRef = + NamedNodeRef::new_unchecked("http://rdaregistry.info/Elements/w/datatype/P10088"); +} + +pub mod rdaed { + use oxigraph::model::NamedNodeRef; + + pub const TITLE_OF_EXPRESSION: NamedNodeRef = + NamedNodeRef::new_unchecked("http://rdaregistry.info/Elements/e/datatype/P20312"); +} \ No newline at end of file diff --git a/publish/src/main.rs b/publish/src/main.rs index 4644558..573aa23 100644 --- a/publish/src/main.rs +++ b/publish/src/main.rs @@ -155,8 +155,7 @@ fn main() -> color_eyre::Result<()> { .map(Triple::from) .collect::(); - let documents = indexer.graph(&graph_with_inferences)?; - for document in documents { + for document in indexer.graph(&graph_with_inferences)? { writer.add_document(document)?; } diff --git a/search/src/schema.rs b/search/src/schema.rs index f58e22f..232ea1a 100644 --- a/search/src/schema.rs +++ b/search/src/schema.rs @@ -39,6 +39,8 @@ impl Schema { schema_builder.add_text_field("given_name:en", stored_ngram32.clone()); schema_builder.add_text_field("corporate_name:en", stored_ngram32.clone()); + schema_builder.add_text_field("title:en", stored_en_stem.clone()); + schema_builder.add_u64_field("subtitle_start", schema::STORED); schema_builder.add_u64_field("subtitle_end", schema::STORED); schema_builder.add_text_field("subtitle:en", stored_en_stem.clone());