Lucene中的多期通配符查询?

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的查询?

谢谢!

kar*_*m79 5

不幸的是,不是你希望实现它的方式:

Lucene支持单个术语内的单个和多个字符通配符搜索(但不支持短语查询).

即使有可能,也许不是一个好主意:

通配符,范围和模糊搜索查询可能匹配太多术语.它可能会导致令人难以置信的搜索性能降级.

我想如果你坚持使用多个通配符,就可以选择两个单独的搜索,一个用于每个通配符,并将结果捆绑在一起.