atomic-server icon indicating copy to clipboard operation
atomic-server copied to clipboard

Chinese / Japanese / Korean tokenizer support for search / tantivy

Open joepio opened this issue 1 year ago • 2 comments

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.

joepio avatar May 06 '24 13:05 joepio

Another possible approach: Generate JSON file at runtime and use off-the-shelf search engine server to read the data.

  1. 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
  2. user could choose their own each engine like Algolia, Meilisearch...

shidianxia avatar May 07 '24 03:05 shidianxia

  1. 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.

joepio avatar May 07 '24 07:05 joepio