Zend_Search_Lucene поиск в массиве - PullRequest
1 голос
/ 10 ноября 2009

Есть ли способ сохранить массив как поле документа и затем запросить этот массив?

У меня есть коллекция предметов, которые помечены. Я хотел бы иметь возможность искать все элементы, которые соответствуют, например, теги 55 и 67.

Как бы мне этого добиться?

1 Ответ

0 голосов
/ 11 ноября 2009

Сначала вы должны создать индексный файл с данными в вашем массиве. В документации рассказывается, как создать новый индекс .

так, что ваш массив выглядит как

$data = array(
  array(
     'tag' => '55 67',
     'content' => 'Lorem Ipsu 1',
     'url' => 'http://foobar.net/content.php?id=1'
  ),
  array(
     'tag' => '32 67'
     'content' => 'Lorem Ipsu 2',
     'url' => 'http://foobar.net/content.php?id=2'
  )
);

это даст что-то подобное для создания вашего индекса

 // Create index
$index = Zend_Search_Lucene::create('/data/my-index');


foreach($data as $row){
  $doc = new Zend_Search_Lucene_Document();
  // Store document URL to identify it in the search results
  $doc->addField(Zend_Search_Lucene_Field::Text('url', $row['url']));

  // Store document TAGS 
  $doc->addField(Zend_Search_Lucene_Field::Text('tag', $row['tag']));

  // Index document contents
  $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $row['content']));

  // Add document to the index
  $index->addDocument($doc);
 }

наконец-то запрос ваш индексный файл

$index = Zend_Search_Lucene::open('/data/my_index');

$hits = $index->find('tag:55 AND tag:67');

foreach ($hits as $hit) {
    echo $hit->score;
    echo $hit->url;
    echo $hit->tag;
}

Примечание

Я не совсем уверен, почему вы собираетесь использовать Lucene для такой работы, если вы просто хотите, чтобы список статей соответствовал любому тегу, было бы проще сделать это с простыми SQL запросами.

После, если хотите узнать, как работает Zend_Search_Lucene, это может быть примером

...