Distance Query এবং GeoSpatial Filtering

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

275

Apache Lucene হল একটি শক্তিশালী ফ্রি এবং ওপেন সোর্স লাইব্রেরি যা ডকুমেন্ট ইনডেক্সিং এবং সার্চিং সিস্টেম তৈরি করতে ব্যবহৃত হয়। এটি বিশেষ করে টেক্সট ডেটার জন্য ডিজাইন করা হলেও, Lucene-এ GeoSpatial Filtering এবং Distance Query এর মত জিওগ্রাফিক্যাল ডেটার জন্যও সমর্থন রয়েছে।

Distance Query এবং GeoSpatial Filtering ব্যবহার করে, আপনি জিওগ্রাফিক্যাল তথ্য যেমন ভৌগোলিক অবস্থান বা স্থান সংক্রান্ত তথ্য ইনডেক্স এবং সার্চ করতে পারেন।

এই টিউটোরিয়ালে, আমরা Lucene-এ Distance Query এবং GeoSpatial Filtering কিভাবে কাজ করে, তা উদাহরণ সহ আলোচনা করব।


১. GeoSpatial Filtering Overview

GeoSpatial Filtering বা জিওস্প্যাটিয়াল ফিল্টারিং হল এমন একটি প্রক্রিয়া যা ব্যবহার করে ল্যাটিটিউড (latitude) এবং লংগিটিউড (longitude) এর উপর ভিত্তি করে ডেটা ফিল্টার করা হয়। এই ধরনের ফিল্টারিং ব্যবহৃত হয় যখন জিওগ্রাফিক্যাল ডেটা যেমন অবস্থান (location) বা দূরত্ব (distance) নির্ধারণ করতে হয়।

লুসিনের GeoSpatial Filtering সিস্টেমটি LatLongPoint এবং LatLonDocValuesField এর মত বিশেষ ডকুমেন্ট ফিল্ড ব্যবহার করে জিওগ্রাফিক্যাল ডেটাকে ইনডেক্স এবং সার্চ করতে সক্ষম।


২. Lucene এ GeoSpatial Indexing

লুসিনের GeoSpatial Query করার জন্য প্রথমে আপনাকে GeoSpatial Indexing করতে হবে। এটি সাধারণত latitude এবং longitude এর মত জিওগ্রাফিক্যাল কোঅর্ডিনেট ইনডেক্স করে।

GeoSpatial Indexing উদাহরণ:

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.LatLonPoint;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import java.nio.file.Paths;

public class GeoSpatialIndexingExample {

    public static void main(String[] args) throws Exception {
        Directory dir = FSDirectory.open(Paths.get("/path/to/index"));
        IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig());

        // Creating a document with a GeoSpatial field (latitude, longitude)
        Document doc = new Document();
        doc.add(new LatLonPoint("location", 40.7128, -74.0060));  // Example: New York City coordinates
        writer.addDocument(doc);

        writer.close();
    }
}

এখানে, LatLonPoint ফিল্ড ব্যবহার করে latitude এবং longitude ইনডেক্স করা হচ্ছে। এখানে 40.7128 হল latitude এবং -74.0060 হল longitude


৩. GeoSpatial Distance Query

GeoSpatial Distance Query ব্যবহার করে আপনি একটি নির্দিষ্ট পয়েন্টের কাছাকাছি ডকুমেন্ট খুঁজে পেতে পারেন। এটি latitude এবং longitude এর ভিত্তিতে একটি distance নির্ধারণ করে।

Distance Query উদাহরণ:

import org.apache.lucene.document.LatLonPoint;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.store.FSDirectory;

public class GeoSpatialSearchExample {

    public static void main(String[] args) throws Exception {
        Directory dir = FSDirectory.open(Paths.get("/path/to/index"));
        IndexReader reader = DirectoryReader.open(dir);
        IndexSearcher searcher = new IndexSearcher(reader);

        // Define the location to search from (latitude, longitude)
        double lat = 40.7128;  // Latitude of New York City
        double lon = -74.0060;  // Longitude of New York City

        // Create a distance query
        Query query = LatLonPoint.newDistanceQuery("location", lat, lon, 10.0);  // Search within 10 km

        // Execute the query
        TopDocs results = searcher.search(query, 10);
        for (ScoreDoc scoreDoc : results.scoreDocs) {
            Document doc = searcher.doc(scoreDoc.doc);
            System.out.println("Found document: " + doc);
        }

        reader.close();
    }
}

এখানে, LatLonPoint.newDistanceQuery() ব্যবহার করা হয়েছে যা একটি distance query তৈরি করে। এটি নির্দিষ্ট latitude এবং longitude থেকে 10.0 km এর মধ্যে অবস্থিত ডকুমেন্টগুলো খুঁজে পাবে।


৪. GeoSpatial Filtering for Bounding Boxes

GeoSpatial Filtering এছাড়া bounding boxes (অর্থাৎ একটি নির্দিষ্ট আয়তক্ষেত্র) ব্যবহার করে অবস্থানগুলিকে ফিল্টার করার জন্যও ব্যবহার করা যেতে পারে।

Bounding Box Query উদাহরণ:

import org.apache.lucene.search.Query;
import org.apache.lucene.search.LatLonPoint;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;

public class BoundingBoxSearchExample {

    public static void main(String[] args) throws Exception {
        Directory dir = FSDirectory.open(Paths.get("/path/to/index"));
        IndexReader reader = DirectoryReader.open(dir);
        IndexSearcher searcher = new IndexSearcher(reader);

        // Define the bounding box with a rectangle: (lat1, lon1) to (lat2, lon2)
        double lat1 = 40.0, lon1 = -75.0;  // Lower-left corner
        double lat2 = 42.0, lon2 = -72.0;  // Upper-right corner

        // Bounding box query
        Query query = LatLonPoint.newBoxQuery("location", lat1, lon1, lat2, lon2);

        // Execute the query
        TopDocs results = searcher.search(query, 10);
        for (ScoreDoc scoreDoc : results.scoreDocs) {
            Document doc = searcher.doc(scoreDoc.doc);
            System.out.println("Found document: " + doc);
        }

        reader.close();
    }
}

এখানে, newBoxQuery() ব্যবহার করা হয়েছে, যা একটি বাউন্ডিং বক্সের মধ্যে ডকুমেন্টগুলো খুঁজে বের করবে।


৫. GeoSpatial Filtering with Distance Sort

GeoSpatial Filtering এর সাথে distance sort ব্যবহার করে আপনি ডকুমেন্টগুলিকে তাদের দূরত্বের উপর ভিত্তি করে সাজিয়ে রাখতে পারেন।

Distance Sorting উদাহরণ:

import org.apache.lucene.search.SortField;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TopDocs;

public class GeoSpatialSortExample {

    public static void main(String[] args) throws Exception {
        // Define the searcher and location (latitude, longitude)
        IndexSearcher searcher = new IndexSearcher(reader);
        double lat = 40.7128;
        double lon = -74.0060;

        // Create a query to find documents within a distance of 100 km
        Query query = LatLonPoint.newDistanceQuery("location", lat, lon, 100.0);

        // Sort the results by distance from the search point
        Sort sort = new Sort(new SortField("location", SortField.Type.DOC));

        // Execute the query with sorting
        TopDocs results = searcher.search(query, 10, sort);
        for (ScoreDoc scoreDoc : results.scoreDocs) {
            Document doc = searcher.doc(scoreDoc.doc);
            System.out.println("Document: " + doc);
        }
    }
}

এখানে, SortField ব্যবহার করে ডকুমেন্টগুলোকে তাদের distance থেকে সাজানো হচ্ছে, যাতে কাছাকাছি ডকুমেন্টগুলো আগে আসবে।


সারাংশ

Lucene-এ GeoSpatial Filtering এবং Distance Query ব্যবহার করে আপনি জিওগ্রাফিক্যাল ডেটা যেমন latitude এবং longitude এর উপর ভিত্তি করে ডেটা ইনডেক্স এবং সার্চ করতে পারেন। GeoSpatial Filtering এবং Distance Query এর মাধ্যমে আপনি স্থান নির্ধারণ, ডেটা ফিল্টারিং এবং bounding box এর মধ্যে অবস্থিত ডেটা খুঁজে বের করতে পারেন। এছাড়া, distance sorting এর মাধ্যমে আপনি ডকুমেন্টগুলিকে তাদের ভৌগোলিক অবস্থান থেকে সাজিয়ে দেখতে পারেন।

এটি গুগল ম্যাপ, ট্র্যাভেল রুট বা স্থান সম্পর্কিত সার্চিং সিস্টেম তৈরি করতে ব্যবহৃত হতে পারে। Lucene-এর এই শক্তিশালী জিওস্প্যাটিয়াল ফিচার জিওগ্রাফিক্যাল ডেটার কার্যকরী ব্যবহার নিশ্চিত করে।


Content added By
Promotion

Are you sure to start over?

Loading...