mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2026-01-07 17:42:55 +00:00
* fix windows build (#1) * Fix windows build * Add doc traits * Add field value iter * Add value and serialization * Adjust order * Fix bug * Correct type * Fix generic bugs * Reformat code * Add generic to index writer which I forgot about * Fix missing generics on single segment writer * Add missing type export * Add default methods for convenience * Cleanup * Fix more-like-this query to use standard types * Update API and fix tests * Add doc traits * Add field value iter * Add value and serialization * Adjust order * Fix bug * Correct type * Rebase main and fix conflicts * Reformat code * Merge upstream * Fix missing generics on single segment writer * Add missing type export * Add default methods for convenience * Cleanup * Fix more-like-this query to use standard types * Update API and fix tests * Add tokenizer improvements from previous commits * Add tokenizer improvements from previous commits * Reformat * Fix unit tests * Fix unit tests * Use enum in changes * Stage changes * Add new deserializer logic * Add serializer integration * Add document deserializer * Implement new (de)serialization api for existing types * Fix bugs and type errors * Add helper implementations * Fix errors * Reformat code * Add unit tests and some code organisation for serialization * Add unit tests to deserializer * Add some small docs * Add support for deserializing serde values * Reformat * Fix typo * Fix typo * Change repr of facet * Remove unused trait methods * Add child value type * Resolve comments * Fix build * Fix more build errors * Fix more build errors * Fix the tests I missed * Fix examples * fix numerical order, serialize PreTok Str * fix coverage * rename Document to TantivyDocument, rename DocumentAccess to Document add Binary prefix to binary de/serialization * fix coverage --------- Co-authored-by: Pascal Seitz <pascal.seitz@gmail.com>
98 lines
2.7 KiB
Rust
98 lines
2.7 KiB
Rust
/// `doc!` is a shortcut that helps building `Document`
|
|
/// objects.
|
|
///
|
|
/// Assuming that `field1` and `field2` are `Field` instances.
|
|
/// You can create a document with a value of `value1` for `field1`
|
|
/// `value2` for `field2`, as follows :
|
|
///
|
|
/// ```c
|
|
/// doc!(
|
|
/// field1 => value1,
|
|
/// field2 => value2,
|
|
/// )
|
|
/// ```
|
|
///
|
|
/// The value can be a `u64`, a `&str`, a `i64`, or a `String`.
|
|
///
|
|
/// # Warning
|
|
///
|
|
/// The document hence created, is not yet validated against a schema.
|
|
/// Nothing prevents its user from creating an invalid document missing a
|
|
/// field, or associating a `String` to a `u64` field for instance.
|
|
///
|
|
/// # Example
|
|
///
|
|
/// ```rust
|
|
/// use tantivy::schema::{Schema, TEXT, FAST};
|
|
/// use tantivy::doc;
|
|
///
|
|
/// //...
|
|
///
|
|
/// # fn main() {
|
|
/// let mut schema_builder = Schema::builder();
|
|
/// let title = schema_builder.add_text_field("title", TEXT);
|
|
/// let author = schema_builder.add_text_field("text", TEXT);
|
|
/// let likes = schema_builder.add_u64_field("num_u64", FAST);
|
|
/// let schema = schema_builder.build();
|
|
/// let doc = doc!(
|
|
/// title => "Life Aquatic",
|
|
/// author => "Wes Anderson",
|
|
/// likes => 4u64
|
|
/// );
|
|
/// # }
|
|
/// ```
|
|
#[macro_export]
|
|
macro_rules! doc(
|
|
() => {
|
|
{
|
|
($crate::TantivyDocument::default())
|
|
}
|
|
}; // avoids a warning due to the useless `mut`.
|
|
($($field:expr => $value:expr),*) => {
|
|
{
|
|
let mut document = $crate::TantivyDocument::default();
|
|
$(
|
|
document.add_field_value($field, $value);
|
|
)*
|
|
document
|
|
}
|
|
};
|
|
// if there is a trailing comma retry with the trailing comma stripped.
|
|
($($field:expr => $value:expr),+ ,) => {
|
|
doc!( $( $field => $value ), *)
|
|
};
|
|
);
|
|
|
|
#[cfg(test)]
|
|
mod test {
|
|
use crate::schema::{Schema, FAST, TEXT};
|
|
|
|
#[test]
|
|
fn test_doc_basic() {
|
|
let mut schema_builder = Schema::builder();
|
|
let title = schema_builder.add_text_field("title", TEXT);
|
|
let author = schema_builder.add_text_field("text", TEXT);
|
|
let likes = schema_builder.add_u64_field("num_u64", FAST);
|
|
let _schema = schema_builder.build();
|
|
let _doc = doc!(
|
|
title => "Life Aquatic",
|
|
author => "Wes Anderson",
|
|
likes => 4u64
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_doc_trailing_comma() {
|
|
let mut schema_builder = Schema::builder();
|
|
let title = schema_builder.add_text_field("title", TEXT);
|
|
let author = schema_builder.add_text_field("text", TEXT);
|
|
let likes = schema_builder.add_u64_field("num_u64", FAST);
|
|
let _schema = schema_builder.build();
|
|
let _doc = doc!(
|
|
title => "Life Aquatic",
|
|
author => "Wes Anderson",
|
|
likes => 4u64,
|
|
);
|
|
}
|
|
}
|