mirror of
https://github.com/pesde-pkg/pesde.git
synced 2024-12-12 11:00:36 +00:00
fix(registry): ignore search query casing
This commit is contained in:
parent
ab9124e02c
commit
e2fe1c50b8
3 changed files with 18 additions and 16 deletions
|
@ -28,23 +28,12 @@ pub async fn search_packages(
|
||||||
|
|
||||||
let id = schema.get_field("id").unwrap();
|
let id = schema.get_field("id").unwrap();
|
||||||
|
|
||||||
let scope = schema.get_field("scope").unwrap();
|
|
||||||
let name = schema.get_field("name").unwrap();
|
|
||||||
let description = schema.get_field("description").unwrap();
|
|
||||||
|
|
||||||
let query = request.query.as_deref().unwrap_or_default().trim();
|
let query = request.query.as_deref().unwrap_or_default().trim();
|
||||||
|
|
||||||
let query = if query.is_empty() {
|
let query = if query.is_empty() {
|
||||||
Box::new(AllQuery)
|
Box::new(AllQuery)
|
||||||
} else {
|
} else {
|
||||||
let mut query_parser = tantivy::query::QueryParser::for_index(
|
app_state.query_parser.parse_query(query)?
|
||||||
searcher.index(),
|
|
||||||
vec![scope, name, description],
|
|
||||||
);
|
|
||||||
query_parser.set_field_boost(scope, 2.0);
|
|
||||||
query_parser.set_field_boost(name, 3.5);
|
|
||||||
|
|
||||||
query_parser.parse_query(query)?
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let (count, top_docs) = searcher
|
let (count, top_docs) = searcher
|
||||||
|
|
|
@ -45,6 +45,7 @@ pub struct AppState {
|
||||||
|
|
||||||
pub search_reader: tantivy::IndexReader,
|
pub search_reader: tantivy::IndexReader,
|
||||||
pub search_writer: std::sync::Mutex<tantivy::IndexWriter>,
|
pub search_writer: std::sync::Mutex<tantivy::IndexWriter>,
|
||||||
|
pub query_parser: tantivy::query::QueryParser,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
|
@ -105,7 +106,7 @@ async fn run() -> std::io::Result<()> {
|
||||||
.await
|
.await
|
||||||
.expect("failed to refresh source");
|
.expect("failed to refresh source");
|
||||||
|
|
||||||
let (search_reader, search_writer) = make_search(&project, &source);
|
let (search_reader, search_writer, query_parser) = make_search(&project, &source);
|
||||||
|
|
||||||
let app_data = web::Data::new(AppState {
|
let app_data = web::Data::new(AppState {
|
||||||
storage: {
|
storage: {
|
||||||
|
@ -124,6 +125,7 @@ async fn run() -> std::io::Result<()> {
|
||||||
|
|
||||||
search_reader,
|
search_reader,
|
||||||
search_writer: std::sync::Mutex::new(search_writer),
|
search_writer: std::sync::Mutex::new(search_writer),
|
||||||
|
query_parser,
|
||||||
});
|
});
|
||||||
|
|
||||||
let publish_governor_config = GovernorConfigBuilder::default()
|
let publish_governor_config = GovernorConfigBuilder::default()
|
||||||
|
|
|
@ -6,11 +6,16 @@ use pesde::{
|
||||||
};
|
};
|
||||||
use tantivy::{
|
use tantivy::{
|
||||||
doc,
|
doc,
|
||||||
|
query::QueryParser,
|
||||||
schema::{IndexRecordOption, TextFieldIndexing, TextOptions, FAST, STORED, STRING},
|
schema::{IndexRecordOption, TextFieldIndexing, TextOptions, FAST, STORED, STRING},
|
||||||
|
tokenizer::TextAnalyzer,
|
||||||
DateTime, IndexReader, IndexWriter, Term,
|
DateTime, IndexReader, IndexWriter, Term,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn make_search(project: &Project, source: &PesdePackageSource) -> (IndexReader, IndexWriter) {
|
pub fn make_search(
|
||||||
|
project: &Project,
|
||||||
|
source: &PesdePackageSource,
|
||||||
|
) -> (IndexReader, IndexWriter, QueryParser) {
|
||||||
let mut schema_builder = tantivy::schema::SchemaBuilder::new();
|
let mut schema_builder = tantivy::schema::SchemaBuilder::new();
|
||||||
|
|
||||||
let field_options = TextOptions::default().set_indexing_options(
|
let field_options = TextOptions::default().set_indexing_options(
|
||||||
|
@ -28,7 +33,9 @@ pub fn make_search(project: &Project, source: &PesdePackageSource) -> (IndexRead
|
||||||
let search_index = tantivy::Index::create_in_ram(schema_builder.build());
|
let search_index = tantivy::Index::create_in_ram(schema_builder.build());
|
||||||
search_index.tokenizers().register(
|
search_index.tokenizers().register(
|
||||||
"ngram",
|
"ngram",
|
||||||
tantivy::tokenizer::NgramTokenizer::all_ngrams(1, 12).unwrap(),
|
TextAnalyzer::builder(tantivy::tokenizer::NgramTokenizer::all_ngrams(1, 12).unwrap())
|
||||||
|
.filter(tantivy::tokenizer::LowerCaser)
|
||||||
|
.build(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let search_reader = search_index
|
let search_reader = search_index
|
||||||
|
@ -56,7 +63,11 @@ pub fn make_search(project: &Project, source: &PesdePackageSource) -> (IndexRead
|
||||||
search_writer.commit().unwrap();
|
search_writer.commit().unwrap();
|
||||||
search_reader.reload().unwrap();
|
search_reader.reload().unwrap();
|
||||||
|
|
||||||
(search_reader, search_writer)
|
let mut query_parser = QueryParser::for_index(&search_index, vec![scope, name, description]);
|
||||||
|
query_parser.set_field_boost(scope, 2.0);
|
||||||
|
query_parser.set_field_boost(name, 3.5);
|
||||||
|
|
||||||
|
(search_reader, search_writer, query_parser)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_version(app_state: &AppState, name: &PackageName, entry: IndexFileEntry) {
|
pub fn update_version(app_state: &AppState, name: &PackageName, entry: IndexFileEntry) {
|
||||||
|
|
Loading…
Reference in a new issue