Zend_Search_Lucene查询解析问题

Jes*_*sta 2 php lucene search zend-framework zend-search-lucene

这是设置,我有一个Lucene索引,它适用于我索引的2,000个文档.我一直在使用Luke(Lucene Index Toolbox,v.0.9.2)来调试查询,并使用ZF 1.9.

我的Lucene索引的布局如下:

I = Indexed
T = Tokenized
S = Stored

Fields:
author - ITS
category - ITS
publication - ITS
publicationdate - IS
summary - ITS
title - ITS
Run Code Online (Sandbox Code Playgroud)

基本上我有一个可以通过上述字段搜索的表单,让你混合和匹配任何上述信息,并将其解析为zend luceue查询.这不是问题,问题是当我开始组合术语时,在查找中触发的"优化"方法会导致查询消失.

这是我正在运行的示例搜索:

表格版本:

Title: test title
Publication: publication name
Run Code Online (Sandbox Code Playgroud)

Lucene查询解析:

+(title:test title) +(publication:publication name)
Run Code Online (Sandbox Code Playgroud)

现在,如果我接受此查询字符串,并将其打入LUKE,然后点击"搜索",则返回结果就好了.当我使用查询查找方法时,它会爆炸.所以我做了一些关于它如何运作并发现问题的研究(我相信)

首先,下面是执行搜索的实际代码行:

$searchQuery = "+(title:test title) +(publication:publication name)";
$hits = new ArrayObject($this->index->find($searchQuery));  
Run Code Online (Sandbox Code Playgroud)

它是实际代码的简化版本,但这就是它生成的内容.

现在继续调试后我注意到的是,"优化"方法只会破坏查询本身.我创建了以下代码:

$rewrite = $searchQuery->rewrite($this->index);
$optimize = $searchQuery->rewrite($this->index)->optimize($this->index); 
echo "======<br/>";
echo "Original: ".$searchQuery."<br/>";
echo "Rewrite: ".$rewrite."<br/>";
echo "Optimized + Rewrite: ".$optimize."<br/>";
echo "======<br/>";  
Run Code Online (Sandbox Code Playgroud)

其中输出以下文字:

======
Original: +(title:test title) +(publication:publication name)
Rewrite: +(title:test title) +(publication:publication name)
Optimized + Rewrite: 
======
Run Code Online (Sandbox Code Playgroud)

注意第3个输出是如何完全为空的.看来,查询上的重写和优化导致查询字符串只是自己清空.

有没有人知道为什么优化方法似乎只是一起删除我的查询?我错过了一个过滤器或某种可能需要解析的界面吗?当我将它们粘贴到LUKE并手动对索引运行时,所有查询都能正常工作,但是Zend正在解析查询以进行搜索的方式正在发生一些愚蠢的事情.

任何帮助表示赞赏.

Pat*_*ert 6

我会坦率地说,Zend_Search_Lucene(ZSL)很快就出现了问题,而且很久以来一直没有维护.

这在概念上也是错误的.让我解释一下原因:搜索引擎可以快速回复搜索查询,ZSL的问题在于它是用纯PHP实现的.这意味着,在每一个查询,所有索引文件的读取和重新加载一次,连续.它不可能很快.

Lucene本身没有任何问题,甚至有一个非常好的替代方案,名为Solr,它基于Lucene:它是一个用Java实现的搜索服务器,它可以索引并回复你所有的Lucene查询.由于Solr的服务器性质,通过一次又一次地重新加载所有Lucene文件,您不会遇到性能不佳的问题.

这与你问的有些不同,我等了两年才能解决我的ZSL错误,现在是使用Solr的情况:)