我正在尝试在 SolR 查询过程中使用 通配符功能 我想在我的索引中找到包含
fran*
文本的所有文档。
那么,为什么我的通配符语法不起作用?
这是我的 JSON 查询正文请求
{
"params": {
"q": "fran*",
"rows":0,
"defType": "edismax",
}
}
我希望找到包含 France 关键字的所有文档。但它只找到 FRANS / FRAN?物品,不是任何包含法国的物品。
如果我使用搜索查询
France
(没有野猫)进行查询,它会完美运行。
目标字段被索引为带有一些过滤器的文本字段
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ElisionFilterFactory" ignoreCase="true" articles="lang/contractions_fr.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/custom_stopwords_fr.txt" format="snowball" />
<filter class="solr.FrenchLightStemFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" />
</analyzer>
ElisionFilterFactory
和 FrenchLightStemFilterFactory
是这些术语的词干。因此,如果输入查询中的前缀与词干术语不匹配,它们将不匹配。
您可以通过在完整术语和前缀术语之间添加 和
OR
子句来解决这个问题。
所以你的新 JSON 查询正文应该是
{
"params": {
"q": "fran OR fran*",
"rows":0,
"defType": "edismax",
}
}