atomic-server
atomic-server copied to clipboard
Chinese / Japanese / Korean tokenizer support for search / tantivy
Out of the box, Tantivy only support latin languages. We could add some extra tokenizers:
Chinese (tantivy-jieba and cang-jie), Japanese (lindera, Vaporetto, and tantivy-tokenizer-tiny-segmenter) and Korean (lindera + lindera-ko-dic-builder)
I'm not sure if tokenizers can be combined. It doesn't look like it...
Tokenizer-specific fields
use tantivy::schema::{Schema, SchemaBuilder, TEXT};
fn create_schema() -> Schema {
let mut schema_builder = SchemaBuilder::default();
// Create a field for English with a specific tokenizer
schema_builder.add_text_field("english_text", TEXT);
// Create a field for Chinese with a different tokenizer
schema_builder.add_text_field("chinese_text", TEXT);
schema_builder.build()
}
Problem with this approach is that it is very inefficient, it makes the search DB way bigger for every extra tokenizer we have
One Tokenizer To Rule Them All
Not sure if this is possible. We now use the SimpleTokenizer, but that is apparently not good for Chinese chars.
Select tokenizer as config option
We can make the user decide when booting up AtomicServer. This would add some code complexity. It would not work for mixed language instances.
Another possible approach: Generate JSON file at runtime and use off-the-shelf search engine server to read the data.
- add a config field to determine whether to generate JSON(already done by 'atomic-server export' but not at runtime), and probably a generating schedule
- user could choose their own each engine like Algolia, Meilisearch...
- user could choose their own each engine like Algolia, Meilisearch...
That would work as a fallback, but it would not integrate with the front-end. I think AtomicServer should provide a good out-of-the-box experience.