Zend Search Lucene Matches - PullRequest
       33

Zend Search Lucene Matches

0 голосов
/ 18 октября 2011

ОК, допустим, у меня есть поисковый запрос, возвращающий мне несколько объектов Zend_Search_Lucene_Search_QueryHit, содержащих объект Zend_Search_Lucene_Document, соответствующий запросу. У меня есть небольшой вопрос о том, как просто извлечь имя поля из документа, соответствующего запросу str, чтобы выделить его ?? Я надеюсь, что все ясно и не очевидно, чтобы решить :) большое спасибо Алекс

1 Ответ

0 голосов
/ 01 февраля 2012

Предполагая, что "имя", "адрес", "телефон" являются вашими полями типа Zend_Search_Lucene_Field :: Text, и у вас есть одно поле Zend_Search_Lucene_Field :: Unstored с именем "content". Это можно легко решить с помощью " strpos":

    $hits = $index->find($query);

    foreach ($hits as $hit) {
      $result = array();
      if (strpos($hit->name , $query)) {
        $result[$hit->id]['name'] = $query->highlightMatches($hit->name)
      } else {
        $result[$hit->id]['name'] = $hit->name
      }

      if (strpos($hit->address, $query)) {
        $result[$hit->id]['address'] = $query->highlightMatches($hit->address)
      } else {
        $result[$hit->id]['address'] = $hit->address
      }

      if (strpos($hit->phone, $query)) {
        $result[$hit->id]['phone'] = $query->highlightMatches($hit->phone)
      } else {
        $result[$hit->id]['phone'] = $hit->phone
      }
   }

поле вашего телефона может быть ключевым словом Zend_Search_Lucene_Field :: или чем-то еще. если ни одно из этих предыдущих полей не было выделено, это означает, что в вашем контенте была найдена строка $ query, которая не сохранена, поскольку это поле Zend_Search_Lucene_Field :: Unstored. то, что вам нужно сделать, это добавить другое поле типа Zend_Search_Lucene_Field :: Text в ваш $ doc и назвать его «отрывком»

$doc->addField(Zend_Search_Lucene_Field::Text('excerpt', substr($content, 0, 100)));

и добавьте это к вам в предыдущем цикле "foreach"

if (strpos($hit->excerpt, $query)) {
    $result[$hit->id]['excerpt'] = $query->highlightMatches($hit->excerpt)
  } else {
    $result[$hit->id]['excerpt'] = $hit->excerpt
  }
...