mirror of
https://github.com/quickwit-oss/tantivy.git
synced 2025-12-23 02:29:57 +00:00
Implement SPATIAL flag.
Implement a SPATIAL flag for use in creating a spatial field.
This commit is contained in:
committed by
Paul Masurel
parent
63c66005db
commit
43b5f34721
@@ -1,6 +1,6 @@
|
||||
use std::ops::BitOr;
|
||||
|
||||
use crate::schema::{DateOptions, NumericOptions, TextOptions};
|
||||
use crate::schema::{DateOptions, NumericOptions, SpatialOptions, TextOptions};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct StoredFlag;
|
||||
@@ -95,6 +95,14 @@ impl<T: Clone + Into<TextOptions>> BitOr<TextOptions> for SchemaFlagList<T, ()>
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Clone + Into<SpatialOptions>> BitOr<SpatialOptions> for SchemaFlagList<T, ()> {
|
||||
type Output = SpatialOptions;
|
||||
|
||||
fn bitor(self, rhs: SpatialOptions) -> Self::Output {
|
||||
self.head.into() | rhs
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct SchemaFlagList<Head: Clone, Tail: Clone> {
|
||||
pub head: Head,
|
||||
|
||||
@@ -124,6 +124,7 @@ mod ip_options;
|
||||
mod json_object_options;
|
||||
mod named_field_document;
|
||||
mod numeric_options;
|
||||
mod spatial_options;
|
||||
mod text_options;
|
||||
|
||||
use columnar::ColumnType;
|
||||
@@ -144,6 +145,7 @@ pub use self::json_object_options::JsonObjectOptions;
|
||||
pub use self::named_field_document::NamedFieldDocument;
|
||||
pub use self::numeric_options::NumericOptions;
|
||||
pub use self::schema::{Schema, SchemaBuilder};
|
||||
pub use self::spatial_options::{SpatialOptions, SPATIAL};
|
||||
pub use self::term::{Term, ValueBytes};
|
||||
pub use self::text_options::{TextFieldIndexing, TextOptions, STRING, TEXT};
|
||||
|
||||
|
||||
51
src/schema/spatial_options.rs
Normal file
51
src/schema/spatial_options.rs
Normal file
@@ -0,0 +1,51 @@
|
||||
use std::ops::BitOr;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::schema::flags::StoredFlag;
|
||||
|
||||
/// Define how a spatial field should be handled by tantivy.
|
||||
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Default)]
|
||||
pub struct SpatialOptions {
|
||||
#[serde(default)]
|
||||
stored: bool,
|
||||
}
|
||||
|
||||
/// The field will be untokenized and indexed.
|
||||
pub const SPATIAL: SpatialOptions = SpatialOptions { stored: false };
|
||||
|
||||
impl SpatialOptions {
|
||||
/// Returns true if the geometry is to be stored.
|
||||
#[inline]
|
||||
pub fn is_stored(&self) -> bool {
|
||||
self.stored
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: Into<SpatialOptions>> BitOr<T> for SpatialOptions {
|
||||
type Output = SpatialOptions;
|
||||
|
||||
fn bitor(self, other: T) -> SpatialOptions {
|
||||
let other = other.into();
|
||||
SpatialOptions {
|
||||
stored: self.stored | other.stored,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<StoredFlag> for SpatialOptions {
|
||||
fn from(_: StoredFlag) -> SpatialOptions {
|
||||
SpatialOptions { stored: true }
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::schema::*;
|
||||
|
||||
#[test]
|
||||
fn test_field_options() {
|
||||
let field_options = STORED | SPATIAL;
|
||||
assert!(field_options.is_stored());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user