这是设置,我有一个 Lucene 索引,它适用于我索引的 2,000 个文档。我一直在使用 Luke (Lucene Index Toolbox, v.0.9.2) 来调试查询,并且正在使用 ZF 1.9。
我的 Lucene Index 的布局如下:
I = Indexed
T = Tokenized
S = Stored
Fields:
author - ITS
category - ITS
publication - ITS
publicationdate - IS
summary - ITS
title - ITS
基本上我有一个可以通过上述字段搜索的表单,让您混合和匹配上述任何信息,并将其解析为 zend luceue 查询。这不是问题,问题是当我开始组合术语时,在查找中触发的“优化”方法会导致查询消失。
这是我现在正在运行的示例搜索:
表格版本:
Title: test title
Publication: publication name
Lucene 查询解析:
+(title:test title) +(publication:publication name)
现在,如果我把这个查询字符串输入 LUKE,然后点击“搜索”,它会返回结果就好了。当我使用 Query Find 方法时,它会爆炸。所以我对它的功能做了一些研究,发现了一个问题(我相信)
首先,这是执行搜索的实际代码行:
$searchQuery = "+(title:test title) +(publication:publication name)";
$hits = new ArrayObject($this->index->find($searchQuery));
它是实际代码的简化版本,但这就是它生成的内容。
现在这是我在调试后注意到的,“优化”方法只是破坏了查询本身。我创建了以下代码:
$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/>";
输出以下文本:
======
Original: +(title:test title) +(publication:publication name)
Rewrite: +(title:test title) +(publication:publication name)
Optimized + Rewrite:
======
请注意第三个输出是如何完全为空的。查询上的重写和优化似乎导致查询字符串本身为空。
有谁知道为什么优化方法似乎只是一起删除了我的查询?我是否缺少可能需要解析的过滤器或某种接口?当我将所有查询粘贴到 LUKE 并手动针对索引运行它们时,所有查询都能完美运行,但是 Zend 解析查询以进行搜索的方式出现了一些愚蠢的问题。
任何帮助表示赞赏。