我正在使用波特过滤器工厂处理其中包含3到4个字的字段。
例如:“ ABC BLOSSOM公司”
我也希望在搜索ABC BLOSSOMING COMPANY时获取上述文档。
当我查询此:
$candidat = new Candidat();
$form = $this->createForm(CandidatType::class, $candidat);
;
$this->render("cvtheque/ajouter_candidat.html.twig",['form' => $form->createView()])
我得到了结果
这就是解析后的查询的样子
+名称:南部+名称:开花 + 名称:公司 (Stemmer工作正常)
但是当我添加模糊语法并像这样查询时,
name:ABC AND name:BLOSSOMING AND name:COMPANY
搜索未提供任何文档作为结果,并且已解析的查询如下所示
+名称:abc〜1 +名称:正在开花〜1 +名称:公司〜2
这清楚地表明没有发生阻止。 请查看并提供反馈。
答案 0 :(得分:1)
TL; DR
由于您使用的不是MultiTermAwareComponent的PorterFilter,因此不会发生阻塞。
该做什么?
使用实现MultiTermAwareComponent接口的过滤器/规范化器之一。
说明
您和其他许多人一样,被Solr和Lucense Multiterm的行为所困扰。 Solr Wiki上有a good article about this topic。尽管本文已过时,但仍然适用。
对于大多数Solr用户而言,令人惊讶的一件事是通配符查询没有经过任何分析。实际上,这意味着通配符(以及前缀和范围)查询区分大小写,这与预期不符。从此SOLR-2438,SOLR-2918和SOLR-2921开始,此行为已更改。
您要问什么?本质上,任何术语都可以“指向”多个实际术语。例如,run *可以扩展为run,runner,runing,runt等。同样,范围查询实际上也是“多项”查询。在Solr 3.6之前,这些是完全未处理的,应用程序层通常必须应用所需的任何转换,例如降低输入框的大小。通过“正常”查询分析链运行这些类型的术语会导致各种有趣的行为,因此避免了这种情况。