Ilişkili metin arama sonuçlarını görüntülemek ile ilgili en iyi uygulamaları gerçek sonucundan parçacıkları

4 Cevap php

Ben iyi, hafif arama motoru sonuçlarını ayrıştırmak için MySQL tam metin dizinleri ve php kullanarak benim sitelerden biri için çalışma var. Ince iş ama ben daha 'google-like' sonuçları metin parçacıkları ile sonuçları ve bulunan kelime vurgulanan sunmak istiyorum. Bir php tabanlı çözüm arıyorsunuz. Herhangi bir öneriler?

4 Cevap

Eğer yukarıdaki gibi şık özellikler eklemek istediğiniz kadar gerçek bir veritabanı aranıyor gayet iyi. Benim durumumda bu anahtar kelime ve sayfa kimlikleri / URL'ler / vb, özel bir arama tablo oluşturmak için en iyisidir. Sonra bu tablo içerik ile her n saat doldurmak. Bu nüfusun sırasında her anahtar kelime için her bir belge için parçacıkları ekleyebilirsiniz.

Alternatif hızlı kesmek olabilir:

<?php
$text = 'This is an example text page with content. It could be red, green or blue.';
$keyword = 'red';
$size = 5; // size of snippet either side of keyword

$snippet = '...'.substr($text, strpos($text, $keyword) - $size, strpos($text, $keyword) + sizeof($keyword) + $size).'...';
$snippet = str_replace($keyword, '<strong>'.$keyword.'</strong>', $snippet);
echo $snippet;
?>

MySQL için, en iyi bahis ilk sorgu sözcükleri bölmek kendi değerlerini temizlemek ve sonra güzel bir düzenli ifadeye geri herşeyi birleştirmek olacaktır.

Sonuçlarınızı vurgulamak için, size <strong> etiketini kullanabilirsiniz. Eğer bir öğe üzerinde strong vurgu olarak kullanım semantik olacaktır.

// Done ONCE per page load:
  $search = "Hello World";

  //Remove the quotes and stop words
  $search = str_ireplace(array('"', 'and', 'or'), array('', '', ''), $search);

  // Get the words array
  $words = explode(' ', $search);

  // Clean the array, remove duplicates, etc.
  function remove_empty_values($value) { return trim($value) != ''; }
  function regex_escape(&$value) { $value = preg_quote($value, '/'); }
  $words = array_filter($words, 'remove_empty_values');
  $words = array_unique($words);
  array_walk($words, 'regex_escape');

  $regex = '/(' . implode('|', $words) . ')/gi';

// Done FOR EACH result
  $result = "Something something hello there yes world fun nice";
  $highlighted = preg_replace($regex, '<strong>$0</strong>', $result);

Eğer PostgreSQL kullanıyorsanız, sadece yerleşik ts_headline as described in the documentation kullanabilirsiniz.

kullanmak preg_replace() (veya benzer bir fonksiyon) ve vurgulanan metin ile arama dizesini değiştirin. örneğin

$highlighted_text = preg_replace("/$search/", "<span class='highlighted'>$search</span>", $full_text);

Daha büyük bir sitede ben javascript kullanarak, jquery gibi bir şey gitmek için yol olacağını düşünürdüm