অনুসন্ধান API এর প্রোগ্রাম্যাটিকাল ব্যবহার


30

সমস্যা: আমার নিজের অনুসন্ধানগুলি অনুসন্ধান API এর সাথে প্রোগ্রামগতভাবে চালানো দরকার। আমার পাওয়া প্রতিটি গুগল ফলাফল নন-ডেভেলপারদের শেখানোর দিকে তত্পর হয় যেভাবে আমি চাই তেমন ফলাফল না করে ভিউ সহ মডিউলটি কীভাবে ব্যবহার করতে হয়।

তথ্য:

  • সোলার বা অন্য কোনও পরিবর্তে স্থানীয় ডাটাবেস পরিষেবা ব্যবহার করা।
  • ডাটাবেসে ডেটা সংরক্ষণ করা নেই যা অন্যান্য ফলাফলের পাশাপাশি প্রদর্শিত হবে।
  • সামগ্রীগুলিকে "টাইপ" ট্যাবগুলিতে গোষ্ঠীভুক্ত করা হবে।
  • বিভিন্ন কারণে ভিউ ব্যবহার করা হচ্ছে না।
  • ফেসবুকে এপিআই সক্ষম করেছেন তবে কীভাবে এটি ব্যবহার করবেন সে সম্পর্কে কোনও ক্লু নেই।

কেন: কারণ পৃষ্ঠার যুক্তির পরে অনুসন্ধান পৃষ্ঠাটি / সাইট-সন্ধানে এবং / নোড / কীওয়ার্ড ছাড়াই থাকতে চাই। এছাড়াও একই ধরণের কার্যকারিতা সরবরাহ করতে পারে এমন অন্যান্য মডিউলগুলির পরিধি ছাড়িয়ে এটি কাস্টমাইজ করতে বলা হবে। এবং আমি এটি কীভাবে করব তা শিখতে চাই তবে এটি কীভাবে সম্পাদন করতে হবে তার কোনও টিউটোরিয়াল বা অন্য অন্তর্দৃষ্টি খুঁজে পাইনি।

বাকি: আমি আমার অনুসন্ধান পৃষ্ঠাটি তৈরি করেছি এবং এর উপর দিয়ে আমি অনুসন্ধানটি চালিয়ে যাচ্ছি:

$term = $_SESSION['my-search']['term'];
$server = search_api_server_load('database');
$index = search_api_index_load('default_node_index');
$query = new SearchApiQuery($index);
$query->keys($term); 
$query->fields(array('title','body:value')); 
$srv= new SearchApiDbService($server);
$result = $srv->search($query);

সন্ধানের পরিবর্তনশীল সেট করা হয় যখন কোনও অনুসন্ধান ফর্ম জমা দেওয়া হয় তারপরে ব্যবহারকারীকে অনুসন্ধান / সম্পাদনা এবং ফলাফলগুলি প্রদর্শন করতে সাইট-সন্ধানে পুনর্নির্দেশ করে।

যদি আমি আউটপুট করি $ ফলাফলটি আমি দেখতে পাই যে এটি নোড আইডস এবং তাদের স্কোরগুলির একটি অ্যারে সহ ফলাফলের সেট সহ বিভিন্ন তথ্য সহ একটি অ্যারে।

আমি সেগুলির মধ্য দিয়ে দৌড়াতে পেরেছি, নোডটি ধরেছিলাম এবং ফলাফলগুলি নিজেই প্রদর্শন করি তবে আমি আবিষ্কার করেছি যে অনুসন্ধানের ফলাফলগুলি সরবরাহ করার জন্য অন্য কোনও পদ্ধতি আছে। যদিও আমি এটি পাইনি এবং এটিই সমস্যা।

আমি অনুসন্ধান এপিআই এবং ফেসট এপিআইতে বিভিন্ন শ্রেণীর সন্ধান করেছি এবং তাদের মধ্যে এমন কিছু খুঁজে পাচ্ছি না যা দেখে মনে হয় তারা ফলাফল আউটপুট তৈরি করবে।

এর সাথে যে কোনও সহায়তা প্রশংসিত হবে।

ফলাফল উদাহরণ:

Array
(
[result count] => 11
[results] => Array
    (
        [37] => Array
            (
                [id] => 37
                [score] => 15.7503318786621
            )

        [39] => Array
            (
                [id] => 39
                [score] => 7
            )

        [40] => Array
            (
                [id] => 40
                [score] => 5
            )

        [31] => Array
            (
                [id] => 31
                [score] => 4
            )

        [33] => Array
            (
                [id] => 33
                [score] => 1
            )

        [36] => Array
            (
                [id] => 36
                [score] => 1
            )

        [1] => Array
            (
                [id] => 1
                [score] => 1
            )

        [15] => Array
            (
                [id] => 15
                [score] => 1
            )

        [16] => Array
            (
                [id] => 16
                [score] => 1
            )

        [27] => Array
            (
                [id] => 27
                [score] => 1
            )

        [35] => Array
            (
                [id] => 35
                [score] => 0.980873763561249
            )

    )

[warnings] => Array
    (
    )

[ignored] => Array
    (
    )

[performance] => Array
    (
        [complete] => 0.0033111572265625
        [preprocessing] => 0.00053095817565918
        [execution] => 0.0027379989624023
        [postprocessing] => 4.2200088500977E-5
    )

)

আপনি কি প্রসঙ্গের জন্য ফলাফল অ্যারের একটি ডাম্প সরবরাহ করতে পারেন? আপনি এটিকে সরাসরি থিম_সন্ধান_প্রবিধিতে পাস করতে সক্ষম হতে পারবেন
ক্লাইভ

1
"আমি এগুলির মধ্যে দৌড়াতে পেরেছি, নোডটি ধরেছিলাম এবং ফলাফলগুলি নিজেই প্রদর্শন করেছিলাম তবে আমি আবিষ্কার করেছি যে অনুসন্ধানের ফলাফলগুলি সরবরাহ করার জন্য অন্য কোনও পদ্ধতি হতে পারে। যদিও আমি এটি খুঁজে পাইনি এবং এটিই সমস্যা।" - নোড_ভিউ_ মাল্টিপল () ?
গ্যারেট অ্যালব্রাইট

ক্লাইভ: আমি অনুসন্ধান ফলাফলের ফলাফল দিয়ে আমার প্রশ্ন আপডেট করেছি। গ্যারেট: এই ফাংশনটি দেখানোর জন্য ধন্যবাদ, জানেন না যে এটি বিদ্যমান। এটি অন্য কয়েকটি প্রকল্পের জন্য কার্যকর হবে তবে আমি এখানে কী করতে চাই তার সাথে কোনও প্রাসঙ্গিকতা নেই। :) অনুসন্ধানের API ক্লাসগুলিতে মূল শব্দটি হাইলাইট এবং প্রাসঙ্গিক অনুসন্ধান পাঠ্য প্রদর্শিত হবে বলে মনে করা হচ্ছে তবে আমি কীভাবে এই পদ্ধতিগুলি ব্যবহার করে ফলাফলগুলি রেন্ডার করতে পারি তা নির্ধারণ করতে অক্ষম হয়েছি। এ পর্যন্ত সাহায্য করার জন্য ধন্যবাদ! :)
জেসন গ্রে

আপনি কি ড্রুপাল এপিআইতে অনুসন্ধানের কার্যগুলি দেখার চেষ্টা করেছেন? api.drupal.org/api/drupal/modules!search!search.module/7
আগি হামারথিফ

আমি আমার প্রশ্নে বর্ণিত পরিস্থিতিতে আপনি কি তাদের ব্যবহার করেছেন?
জেসন গ্রে

উত্তর:


4

আপনি অনুসন্ধান API পৃষ্ঠাগুলি সন্ধান করেছেন ? এটি অনুসন্ধান API মডিউলটি ব্যবহার করে এবং একটি কাস্টম অনুসন্ধান পৃষ্ঠা তৈরি করে। আপনি কী করতে চেষ্টা করছেন তা কীভাবে বাস্তবায়ন করবেন সে সম্পর্কে আপনি সম্ভবত সেই মডিউলটি দেখতে পারেন। মডিউল নিজেই এমনকি আপনি যে কার্যকারিতা সন্ধান করছেন তা প্রচুর পরিমাণে সরবরাহ করতে পারে।


1
এমন কোনও সমাধানের জন্য জিজ্ঞাসা করা হয়েছিল যা স্পষ্টভাবে পৃষ্ঠাগুলি বা দর্শনগুলি ব্যবহার করে না
ড্যানিয়েল ওয়াটারস

না তিনি "বিভিন্ন কারণে দর্শন ব্যবহার করছেন না" বলেছিলেন। অনুসন্ধান API মডিউলটি তা করে না। আমার পরামর্শটি যদি সহায়তা না করে
n30r3b3l

2
আমাকে সম্মত হতে হবে যে অনুসন্ধানের API পৃষ্ঠাগুলি মডিউলটি একটি ভাল শুরুর জায়গা! আমি আগে একটি কাস্টম অনুসন্ধান বাস্তবায়ন করেছি এবং কোডটিকে একটি প্রাথমিক পয়েন্ট হিসাবে ব্যবহার করেছি, যা পৃষ্ঠাগুলি ব্যবহার না করেই করা যায়!
পাঠ

1

এখানে প্রায় 100 টি লাইনে আমার সমাধানটি দেওয়া হয়েছে - পৃষ্ঠাগুলির চেয়ে কিছুটা সহজ ...

define('SEARCH_QUERY_TERM', 'query');
define('SEARCH_PAGE_TERM', 'page');
define('SEARCH_LIMIT_TERM', 'limit');
define('SEARCH_DEFAULT_LIMIT', 10);

/**
 * Implements hook_menu().
 */
function my_module_menu() {
    $items['search'] = array(
        'title' => 'Search',
        'page callback' => 'my_module_page',
        'access callback' => TRUE,
        'type' => MENU_CALLBACK,
    );

    return $items;
}

/**
 * My Module Search Functions
 */

function my_module_page() {
    $build = array(
        'form' => drupal_get_form('my_module_form'),
        'results' => array('#theme_wrappers' => array('container')),
    );

    foreach (my_module_result() as $eid => $entity) {
        $build['results'][$eid] = entity_view('node', array($entity), 'teaser');
    }

    return $build;
}

function my_module_form($form, &$form_state) {
    list($query, $page, $limit) = my_module_params();

    $form['query'] = array(
        '#type' => 'textfield',
        '#title' => t('Search'),
        '#default_value' => $query,
    );
    $form['actions'] = array('#type' => 'actions');
    $form['actions']['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Search'),
    );

    return $form;
}

function my_module_form_submit($form, &$form_state) {
    $values = $form_state['values'];
    $query = isset($values['query']) ? $values['query'] : '';
    $form_state['redirect'] = array('search', array('query' => array('query' => $query)));
}

function my_module_params() {
    $query = '';
    $page_number = 0;
    $limit = SEARCH_DEFAULT_LIMIT;
    $params = drupal_get_query_parameters();

    if (isset($params[SEARCH_QUERY_TERM])) {
        $query = $params[SEARCH_QUERY_TERM];
    }
    if (isset($params[SEARCH_PAGE_TERM]) && is_numeric($params[SEARCH_PAGE_TERM])) {
        $page_number = $params[SEARCH_PAGE_TERM];
    }
    if (isset($params[SEARCH_LIMIT_TERM]) && is_numeric($params[SEARCH_LIMIT_TERM])) {
        $limit = $params[SEARCH_LIMIT_TERM];
    }

    return array($query, $page_number, $limit);
}

function my_module_result() {
    $index_id = 'default_node_index';

    list($keys, $page_number, $limit) = my_module_params();
    $offset = $limit * $page_number;

    $options = array(
        'search id' => 'node:default',
    );

    $query = search_api_query($index_id, $options)->keys($keys);

    if ($limit > 0) {
        $query->range($offset, $limit);
    }

    $results = $query->execute();
    $results = isset($results['results']) ? $results['results'] : array();

    return entity_load('node', array_keys($results));
}

1
ফর্মের রাজ্য পুনর্নির্দেশগুলি ব্যবহার করুন এবং দ্রুপাল_গোটো নয়।
কেভিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.