【问题标题】:Zend_Search_Lucene query parsing problemZend_Search_Lucene 查询解析问题
【发布时间】:2010-12-04 00:24:58
【问题描述】:

这是设置,我有一个 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: 
======

注意第三个输出是完全空的。查询上的 Rewrite & Optimize 似乎导致查询字符串本身为空。

有谁知道为什么优化方法似乎只是一起删除了我的查询?我是否缺少可能需要解析的过滤器或某种接口?当我将所有查询粘贴到 LUKE 中并手动针对索引运行它们时,所有查询都能完美运行,但 Zend 解析查询以进行搜索的方式出现了一些愚蠢的问题。

感谢任何帮助。

【问题讨论】:

    标签: php zend-framework search lucene zend-search-lucene


    【解决方案1】:

    坦率地说,Zend_Search_Lucene (ZSL) 有问题,并且很久没有维护了。

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

    Lucene 本身并没有什么问题,甚至还有一个非常好的替代品,名为Solr,它基于 Lucene:它是一个用 Java 实现的搜索服务器,可以索引和回复您的所有 Lucene 查询。由于 Solr 的服务器特性,您不会因为一次又一次地重新加载所有 Lucene 文件而遭受性能不佳的困扰。

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

    【讨论】:

    • 在最近与 zend lucene 战斗了很多之后,得到了 +1 这个!
    猜你喜欢
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2013-12-03
    • 2023-03-19
    相关资源
    最近更新 更多