我正在使用通配符查询搜索名称它工作正常但是当我们搜索ascii字符时它运行不正常 比如当用户搜索“Hélè*”时,它无法搜索。
请注意,我已经创建了在名称字段上执行ascii折叠和小写的分析器。
当我们在query_string中搜索时,它的工作正常。这是否意味着通配符不分析ascii折叠和查询字符串呢? 如果是,那么有没有办法用ascii实现通配符?
任何帮助将不胜感激。
谢谢, 穆赫辛
答案 0 :(得分:5)
尝试使用设置为field
的{{1}} analyze_wildcard
查询。
默认情况下,elasticsearch不会尝试分析通配符查询中的文本,它只会针对某些查询对其进行小写。因此,您的查询正在搜索以true
开头的所有字词,并且由于ascii折叠过滤器,您的索引中没有此类字词。
答案 1 :(得分:0)
在Solr中有一个ReversedWildcardFilterFactory,它在索引时使用。如果查询包含通配符,则使用它时,它不会转换为ascii,否则将使用ascii进行转换和搜索。您可以在ASCIIFoldingFilterFactory之后定义它。
我不知道Lucene中存在类似的东西,但你可以通过查看它的source code来编写你的FilterFactory。
您也可以找到有用的this document。