she*_*k42 6 php lucene full-text-search zend-framework
我正在使用Zend_Search_Lucene,它是Java Lucene的PHP端口.我目前有一些代码将基于字符串数组构建搜索查询,查找至少一个索引字段与提交的每个字符串匹配的结果.简化,它看起来像这样:
(注意:$ words是根据用户输入构造的数组.)
$query = new Zend_Search_Lucene_Search_Query_Boolean();
foreach ($words as $word) {
$term1 = new Zend_Search_Lucene_Index_Term($word, $fieldname1);
$term2 = new Zend_Search_Lucene_Index_term($word, $fieldname2);
$multiq = new Zend_Search_Lucene_Search_Query_MultiTerm();
$multiq->addTerm($term1);
$multiq->addTerm($term2);
$query->addSubquery($multiq, true);
}
$hits = $index->find($query);
Run Code Online (Sandbox Code Playgroud)
我会喜欢做的是替代$字用($字"*".) -添加一个星号,以每个单词的末尾,把它变成一个通配符项.
但是,$ multiq必须是Zend_Search_Lucene_Search_Query_Wildcard而不是Zend_Search_Lucene_Search_Query_MultiTerm,我不认为我仍然可以为每个$ multiq添加多个Index_Terms.
有没有办法构建一个既可以是通配符又可以是MultiTerm的查询?
谢谢!
不幸的是,不是你希望实现它的方式:
Lucene支持单个术语内的单个和多个字符通配符搜索(但不支持短语查询).
即使有可能,也许不是一个好主意:
通配符,范围和模糊搜索查询可能匹配太多术语.它可能会导致令人难以置信的搜索性能降级.
我想如果你坚持使用多个通配符,就可以选择两个单独的搜索,一个用于每个通配符,并将结果捆绑在一起.