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