Multi-Language Search Engine

A powerful Flutter plugin for implementing multi-language search functionality with support for Arabic and English text, fuzzy matching, and typo tolerance.

Features

  • 🔍 Multi-language support: Arabic and English text processing
  • 🎯 Fuzzy search: Handles typos and similar words
  • Fast indexing: Inverted index for quick searches
  • 🎨 Extensible architecture: Clean interfaces for customization
  • 📱 Flutter integration: Easy to use in Flutter applications
  • 🧪 Well-tested: Comprehensive test coverage

Installation

Add this to your pubspec.yaml:

dependencies:
  multi_language_search_engine: ^1.0.0

Then run:

flutter pub get

Quick Start

import 'package:multi_language_search_engine/multi_language_search_engine.dart';

void main() {
  // Sample data
  final data = [
    {'id': 1, 'name': 'John Doe', 'description': 'Software Engineer'},
    {'id': 2, 'name': 'Jane Smith', 'description': 'Product Manager'},
    {'id': 3, 'name': 'أحمد محمد', 'description': 'مطور برمجيات'},
  ];

  // Create search engine for English
  final englishEngine = createSearchEngine(
    data: data,
    languageCode: 'en',
  );

  // Search
  final results = englishEngine.search('software');
  print('Found ${results.length} results');

  // Create search engine for Arabic
  final arabicEngine = createSearchEngine(
    data: data,
    languageCode: 'ar',
  );

  final arabicResults = arabicEngine.search('مطور');
  print('Found ${arabicResults.length} Arabic results');
}

Advanced Usage

Custom Components

You can create custom implementations by implementing the interfaces:

class CustomNormalizer implements TextNormalizer {
  @override
  String normalize(String text) {
    // Your custom normalization logic
    return text.toLowerCase();
  }

  @override
  bool get supportsArabic => false;
}

class CustomFactory implements SearchEngineFactory {
  @override
  TextNormalizer createNormalizer(String languageCode) {
    return CustomNormalizer();
  }

  // Implement other factory methods...
}

Using Custom Factory

final customFactory = CustomFactory();
final searchEngine = createSearchEngine(
  data: data,
  languageCode: 'en',
  factory: customFactory,
);

Language Support

English

  • Case-insensitive search
  • Punctuation removal
  • Typo tolerance (a↔e, i↔y, etc.)
  • Plural/singular variations

Arabic

  • Diacritic removal (Tashkeel)
  • Letter normalization (أ→ا, إ→ا, etc.)
  • Arabic-specific typo variations
  • Right-to-left text support

API Reference

SearchEngine Interface

abstract class SearchEngine {
  List<Map<String, dynamic>> search(String query);
  int get itemCount;
  bool get isInitialized;
  String get languageCode;
  Future<void> initialize(List<Map<String, dynamic>> data);
}

Factory Methods

SearchEngine createSearchEngine({
  required List<Map<String, dynamic>> data,
  required String languageCode,
  SearchEngineFactory? factory,
});

Performance

  • Indexing: O(n) where n is the number of documents
  • Search: O(k) where k is the number of matching documents
  • Memory: Efficient inverted index structure

Testing

Run the tests:

flutter test

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

For questions and support: