带有ascii折叠的elasticsearch通配符查询

时间:2012-12-10 16:01:04

标签: java lucene elasticsearch

我正在使用通配符查询搜索名称它工作正常但是当我们搜索ascii字符时它运行不正常 比如当用户搜索“Hélè*”时,它无法搜索。

请注意,我已经创建了在名称字段上执行ascii折叠和小写的分析器。

当我们在query_string中搜索时,它的工作正常。这是否意味着通配符不分析ascii折叠和查询字符串呢? 如果是,那么有没有办法用ascii实现通配符?

任何帮助将不胜感激。

谢谢, 穆赫辛

2 个答案:

答案 0 :(得分:5)

尝试使用设置为field的{​​{1}} analyze_wildcard查询。

默认情况下,elasticsearch不会尝试分析通配符查询中的文本,它只会针对某些查询对其进行小写。因此,您的查询正在搜索以true开头的所有字词,并且由于ascii折叠过滤器,您的索引中没有此类字词。

答案 1 :(得分:0)

在Solr中有一个ReversedWildcardFilterFactory,它在索引时使用。如果查询包含通配符,则使用它时,它不会转换为ascii,否则将使用ascii进行转换和搜索。您可以在ASCIIFoldingFilterFactory之后定义它。

我不知道Lucene中存在类似的东西,但你可以通过查看它的source code来编写你的FilterFactory。

您也可以找到有用的this document