Practical উদাহরণ: GeoSpatial Search এবং Distance Filtering

Lucene এবং GeoSpatial Search - লুসিন (Lucene) - Java Technologies

232

Apache Lucene একটি শক্তিশালী ইন্ডেক্সিং এবং সার্চ লাইব্রেরি যা Java প্রোজেক্টে অনুসন্ধান সিস্টেম তৈরি করতে ব্যবহৃত হয়। এটি টেক্সট, ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং, এবং GeoSpatial ডেটা (যেমন, স্থানিক ডেটা) সাপোর্ট করে। GeoSpatial Search এবং Distance Filtering বিশেষভাবে ব্যবহার করা হয় যখন আপনি নির্দিষ্ট স্থান বা স্থানান্তরের ওপর ভিত্তি করে ডেটা অনুসন্ধান করতে চান।

এই টিউটোরিয়ালে, আমরা Lucene ব্যবহার করে GeoSpatial Search এবং Distance Filtering এর ধারণা এবং উদাহরণ দেখব।


১. GeoSpatial Search এবং Distance Filtering কী?

  • GeoSpatial Search: এটি স্থানিক ডেটা (যেমন, অবস্থান, শহর, দেশের সীমানা) অনুসন্ধান করার জন্য ব্যবহৃত হয়। সাধারণত এটি Latitude এবং Longitude এর মতো Geo-coordinates ব্যবহার করে। GeoSpatial Search আপনাকে একটি নির্দিষ্ট স্থান বা অঞ্চলের মধ্যে ডেটা অনুসন্ধান করতে সহায়তা করে।
  • Distance Filtering: এটি স্থানিক ডেটার উপর ভিত্তি করে একটি নির্দিষ্ট পয়েন্টের মধ্যে ফিল্টার করা হয়, যেমন, "কোন শহরের মধ্যে 10 কিলোমিটার দূরত্বে থাকা সমস্ত রেস্টুরেন্ট দেখাও"।

Lucene 4.x এর পর থেকে GeoSpatial Search এবং Distance Filtering সুবিধা অন্তর্ভুক্ত করা হয়েছে, যা বিভিন্ন ধরনের ব্যবহারকারী জন্য প্রাসঙ্গিক।


২. Lucene তে GeoSpatial Indexing

Lucene এ GeoSpatial ডেটা ইনডেক্সিং করতে, আপনাকে প্রথমে Lat/Lon (Latitude/Longitude) ব্যবহার করে ইনডেক্স তৈরি করতে হবে। এরপর, এই ইনডেক্সের মাধ্যমে নির্দিষ্ট স্থানিক ডেটা অনুসন্ধান করা যাবে।

২.১ GeoSpatial Indexing উদাহরণ

Lucene এ GeoSpatial Index তৈরি করতে, LatLonPoint বা GeoPointField ব্যবহার করা হয়। এর মাধ্যমে Lat/Long ডেটার জন্য ইন্ডেক্স তৈরি করা হয়।

উদাহরণ: GeoSpatial Indexing
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.DoublePoint;
import org.apache.lucene.geo.GeoPoint;

public class GeoSpatialIndexing {

    public static void main(String[] args) throws Exception {
        // Lucene Index Writer Configuration
        IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
        Directory directory = new RAMDirectory();
        IndexWriter writer = new IndexWriter(directory, config);

        // Example document with GeoSpatial data (Latitude/Longitude)
        Document doc = new Document();
        doc.add(new StringField("id", "1", Field.Store.YES));
        doc.add(new DoublePoint("location", 37.7749, -122.4194));  // San Francisco Lat/Lon
        writer.addDocument(doc);

        doc = new Document();
        doc.add(new StringField("id", "2", Field.Store.YES));
        doc.add(new DoublePoint("location", 34.0522, -118.2437));  // Los Angeles Lat/Lon
        writer.addDocument(doc);

        writer.close();
    }
}

এখানে, DoublePoint ব্যবহার করে Lat/Lon ডেটা ইনডেক্স করা হয়েছে, যা San Francisco এবং Los Angeles এর জন্য Geospatial ডেটা ধারণ করছে।


৩. GeoSpatial Search (Distance Filtering) উদাহরণ

Lucene এ GeoSpatial Search করার জন্য, আমরা GeoPointField বা LatLonPoint ব্যবহার করি। এতে আপনি একটি নির্দিষ্ট অবস্থান (Latitude, Longitude) থেকে নির্দিষ্ট দূরত্বের মধ্যে ডেটা অনুসন্ধান করতে পারবেন।

৩.১ GeoSpatial Search উদাহরণ

import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.BooleanClause;

public class GeoSpatialSearch {

    public static void main(String[] args) throws Exception {
        // Assuming index is already created
        Directory directory = new RAMDirectory();
        IndexReader reader = DirectoryReader.open(directory);
        IndexSearcher searcher = new IndexSearcher(reader);

        // Search with location (Latitude, Longitude)
        double latitude = 37.7749;  // San Francisco
        double longitude = -122.4194;
        double radius = 10000;  // 10 kilometers radius

        // GeoSpatial Query: Distance filtering based on radius
        Query query = LatLonPoint.newDistanceQuery("location", latitude, longitude, radius);
        TopDocs results = searcher.search(query, 10);

        // Display results
        System.out.println("Found " + results.totalHits + " results within " + radius + " meters.");
        reader.close();
    }
}

এখানে, LatLonPoint.newDistanceQuery ব্যবহার করে আমরা San Francisco এর Latitude এবং Longitude থেকে ১০ কিলোমিটার রেঞ্জের মধ্যে যেকোনো ডেটা খুঁজে বের করছি।


৪. Distance Filtering

Distance Filtering এর মাধ্যমে আপনি নির্দিষ্ট স্থান থেকে নির্দিষ্ট দূরত্বের মধ্যে থাকা রেকর্ডগুলি অনুসন্ধান করতে পারেন। Lucene এ newDistanceQuery ব্যবহার করে এটি করা হয়।

৪.১ Distance Filtering উদাহরণ

import org.apache.lucene.document.LatLonPoint;
import org.apache.lucene.search.Query;

public class DistanceFiltering {

    public static void main(String[] args) throws Exception {
        // Create a query to find all points within a 10 km radius
        double latitude = 40.7128; // New York City
        double longitude = -74.0060;
        double radius = 10000; // 10 kilometers

        Query query = LatLonPoint.newDistanceQuery("location", latitude, longitude, radius);
        // Perform the search with the above query and retrieve results
    }
}

এখানে, newDistanceQuery এর মাধ্যমে নিউ ইয়র্ক সিটি থেকে ১০ কিলোমিটার রেঞ্জের মধ্যে যেকোনো GeoSpatial পয়েন্ট অনুসন্ধান করা হয়েছে।


৫. Lucene GeoSpatial Search এর সুবিধা

  1. High Performance: Lucene এর GeoSpatial Search খুব দ্রুত এবং memory efficient। এটি সঠিকভাবে ডেটা ইনডেক্সিং করে এবং সঠিক distance filtering প্রদান করে।
  2. Radius Queries: নির্দিষ্ট দূরত্বের মধ্যে ডেটা খুঁজে বের করা সহজ।
  3. Flexible Query Options: GeoSpatial Query ব্যবহার করে আপনি বিভিন্ন ধরনের দূরত্বের মধ্যে অনুসন্ধান করতে পারবেন।
  4. Efficient Query Execution: Lucene এর latLonPoint এবং GeoPointField ইনডেক্সিং পদ্ধতি দ্রুত সার্চ ফলাফল প্রদান করে।

সারাংশ

Lucene ব্যবহার করে GeoSpatial Search এবং Distance Filtering কার্যকরভাবে ইনডেক্স এবং অনুসন্ধান পরিচালনা করা যায়। GeoSpatial Indexing করতে LatLonPoint বা GeoPointField ব্যবহার করা হয় এবং Distance Filtering এর মাধ্যমে নির্দিষ্ট অবস্থান থেকে নির্দিষ্ট দূরত্বের মধ্যে ডেটা খুঁজে বের করা সম্ভব। Lucene এর GeoSpatial Querying সিস্টেম উন্নত পারফরম্যান্স এবং সঠিক ফলাফল প্রদান করে, যা বিশেষভাবে ম্যাপিং বা অবস্থানভিত্তিক ডেটা অনুসন্ধান করার জন্য উপকারী।


Content added By
Promotion

Are you sure to start over?

Loading...