Zend_Search_Lucene在数组中搜索

时间:2009-11-10 09:34:04

标签: zend-framework zend-search-lucene

有没有办法将数组存储为文档字段,然后查询该数组?

我有一系列标记的项目。我希望能够搜索匹配的所有项目,例如标签55和67。

我将如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

首先,您必须使用数组中的数据创建索引文件。该文档介绍了如何创建new index

所以想象你的数组看起来像

$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);
 }

最后到query您的索引文件

$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的工作原理可以作为一个例子