Pass through excerpts from the Tantivy backend

This commit is contained in:
Olivier 'reivilibre' 2022-03-26 17:25:43 +00:00
parent eedf2ed183
commit 39ffdd1f1f
2 changed files with 9 additions and 9 deletions

View File

@ -1,5 +1,3 @@
use std::ops::Range;
pub mod meili; pub mod meili;
pub mod tantivy; pub mod tantivy;
@ -29,7 +27,6 @@ pub struct SearchDocument {
pub score: f32, pub score: f32,
pub title: String, pub title: String,
pub excerpt: String, pub excerpt: String,
pub excerpt_highlights: Vec<Range<usize>>,
pub tags: Vec<String>, pub tags: Vec<String>,
pub url: String, pub url: String,
} }

View File

@ -10,7 +10,7 @@ use tantivy::collector::TopDocs;
use tantivy::query::QueryParser; use tantivy::query::QueryParser;
use tantivy::schema::{Facet, Field, SchemaBuilder, STORED, TEXT}; use tantivy::schema::{Facet, Field, SchemaBuilder, STORED, TEXT};
use tantivy::tokenizer::TokenizerManager; use tantivy::tokenizer::TokenizerManager;
use tantivy::{doc, Index, IndexWriter}; use tantivy::{doc, Index, IndexWriter, SnippetGenerator};
pub struct Fields { pub struct Fields {
title: Field, title: Field,
@ -174,6 +174,10 @@ impl Backend for TantivyBackend {
let results = searcher.search(&query, &TopDocs::with_limit(50))?; let results = searcher.search(&query, &TopDocs::with_limit(50))?;
let mut out = Vec::with_capacity(results.len()); let mut out = Vec::with_capacity(results.len());
let article_snippet_generator =
SnippetGenerator::create(&searcher, &query, self.fields.article)?;
// TODO ? let nonarticle_snippet_generator = SnippetGenerator::create(&searcher, &query, self.fields.article)?;
for (score, doc_address) in results { for (score, doc_address) in results {
let doc = searcher.doc(doc_address)?; let doc = searcher.doc(doc_address)?;
let url = doc let url = doc
@ -187,14 +191,13 @@ impl Backend for TantivyBackend {
.get(&txn, url.to_owned())? .get(&txn, url.to_owned())?
.context("Document row not found in doc store")?; .context("Document row not found in doc store")?;
let snippet = article_snippet_generator.snippet(&doc_row.body);
let excerpt = snippet.to_html();
out.push(SearchDocument { out.push(SearchDocument {
score, score,
title: doc_row.title, title: doc_row.title,
// TODO excerpt,
excerpt: "".to_string(),
// TODO
excerpt_highlights: vec![],
// TODO
tags: vec![], tags: vec![],
url: url.to_owned(), url: url.to_owned(),
}) })