Skip to content

Commit

Permalink
Merge pull request #55 from botwiki/search-update
Browse files Browse the repository at this point in the history
Search update
  • Loading branch information
stefanbohacek committed Oct 20, 2015
2 parents 8d94e4f + b0e76fd commit 98f83dd
Showing 1 changed file with 61 additions and 6 deletions.
67 changes: 61 additions & 6 deletions plugins/pico_search.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,18 @@ class Pico_Search
{
private $pages = array();

private function search_loop($search_target, $search_query, $assign_score, &$results){
$words = explode(" ", preg_replace('/[^a-zA-Z0-9]+/', ' ', $search_target));

foreach ($search_query as $q) {
foreach ($words as $word) {
if (levenshtein($q, $word)/strlen($word) < $assign_score/strlen($word) ) {
$results += $assign_score - levenshtein($q, $word);
}
}
}
}

public function before_read_file_meta(&$headers)
{
$headers['purpose'] = 'Purpose';
Expand Down Expand Up @@ -41,6 +53,8 @@ public function before_render(&$twig_vars, &$twig)
$this->pages[$k]["score"] = 0;
$title = strtoupper($page["title"]);
$content = strtoupper($page["content"]);
$content_stripped = strip_tags($page["content"]);

$tags = strtoupper($page["tags"]);

if (strstr($title, $q)) $this->pages[$k]["score"]+= 10;
Expand All @@ -62,17 +76,58 @@ public function before_render(&$twig_vars, &$twig)
}
break;
case 'OR':
if (count(array_intersect($qs, explode(" ", $title))) > 0){
$this->pages[$k]["score"]+= 3;

// TODO: Rewrite the loops below (DRY).

// $this->search_loop($title, $qs, 10, $this->pages[$k]["score"]);
// $this->search_loop($content, $qs, 5, $this->pages[$k]["score"]);
// $this->search_loop($tags, $qs, 5, $this->pages[$k]["score"]);

$words = explode(" ", preg_replace('/[^a-zA-Z0-9]+/', ' ', $title));

foreach ($qs as $q) {
foreach ($words as $word) {
if (levenshtein($q, $word)/strlen($word) < 10/strlen($word) ) {
$this->pages[$k]["score"]+= 5 - levenshtein($q, $word);
}
}
}

if (count(array_intersect($qs, explode(" ", $content))) > 0){
$this->pages[$k]["score"]+= 3;

$words = explode(" ", preg_replace('/[^a-zA-Z0-9]+/', ' ', $content));

foreach ($qs as $q) {
foreach ($words as $word) {
if (levenshtein($q, $word)/strlen($word) < 3/strlen($word) ) {
$this->pages[$k]["score"]+= 3 - levenshtein($q, $word);
// TODO:
//
// if (strpos($content_stripped, $q) > -1 ){
// $this->pages[$k]["search_snippet"] = substr($content_stripped, strpos($content_stripped, $q), 100);
// }
//
// Once the search snippet is set up to work, update
// search_results.html as below:
//
// {% if page.search_snippet|length > 0 %}
// <p class="excerpt"><em>{{ page.search_snippet }} ...</em></p>
// {% else %}
// <p class="excerpt">{{ page.description }}</p>
// {% endif %}
}
}
}

if (count(array_intersect($qs, explode(",", $tags))) > 0){
$this->pages[$k]["score"]+= 3;
$words = explode(" ", preg_replace('/[^a-zA-Z0-9]+/', ' ', $tags));

foreach ($qs as $q) {
foreach ($words as $word) {
if (levenshtein($q, $word)/strlen($word) < 3/strlen($word) ) {
$this->pages[$k]["score"]+= 3 - levenshtein($q, $word);
}
}
}

break;
}

Expand Down

0 comments on commit 98f83dd

Please sign in to comment.