gpt4 book ai didi

php - Lucene 中的多术语通配符查询?

转载 作者:可可西里 更新时间:2023-11-01 13:23:42 24 4
gpt4 key购买 nike

我正在使用 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);

喜欢做的是将 $word 替换为 ($word . '*') — 在末尾附加一个星号每个词,把它变成一个通配符术语。

但是,$multiq 必须是 Zend_Search_Lucene_Search_Query_Wildcard 而不是 Zend_Search_Lucene_Search_Query_MultiTerm,而且我认为我仍然无法为每个添加多个 Index_Terms $multiq.

有没有一种方法可以构建一个既是通配符又是 MultiTerm 的查询?

谢谢!

最佳答案

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

Lucene supports single and multiple character wildcard searches within single terms (but not within phrase queries).

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

Wildcard, range and fuzzy search queries may match too many terms. It may cause incredible search performance downgrade.

我想,如果您坚持使用多个通配符术语,应该采用的方法是两个执行两个单独的搜索,一个搜索每个通配符术语,然后将结果捆绑在一起。

关于php - Lucene 中的多术语通配符查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1074675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com