使用 ISOLatin1Accent 字符的 Solr 前缀查询
我正在尝试以一种允许我使用前缀查询“æb*
”以及“aeb*
”查找文档的方式对字段进行索引。会发生什么:它找到后者,但找不到前者。 å、î 等也有同样的问题。
这是我的架构:
<fieldtype name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldtype>
如您所见,我对索引和查询使用相同的分析器。因此,如果我理解正确,查询“æb*
”应该标准化为“aeb*
”。 '*
' 符号是否有某种干扰?如何设置架构以获得所需结果?
我正在使用 Solr 1.4.1。
I'm trying to index a field in a way that allows me to find the document using prefix query 'æb*
' as well as 'aeb*
'. What happens: it finds the latter, but not the former. Same issue with å, î, etc.
This is my schema:
<fieldtype name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldtype>
As you can see I'm using the same analyzers for index and query. So If I understand correctly, the query 'æb*
' should get normalized to 'aeb*
'. Is the '*
' symbol somehow interfering? How can I set up my schema for the desired results?
I'm using Solr 1.4.1.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在前缀、通配符和模糊搜索中,不对搜索词执行文本分析。
因此,即使在搜索时指定了 MappingCharFilterFactory,搜索词也不会进行任何分析。
由于分析是在索引时应用的,因此它只会匹配
aeb*
(重音过滤器和小写),甚至不会匹配任何 大写匹配。您可以定义自己的查询解析器并分析前缀查询的搜索词。
否则,定义带有重音版本和非重音版本的字段,并对这两种版本进行搜索。
但是,您仍然需要小写搜索词。
On prefix, wildcard and fuzzy searches, no text analysis is performed on the search word.
So even if the MappingCharFilterFactory is specified at search time, the search term won't undergo any analysis.
And as the analysis is applied at index time, it will only match
aeb*
(accent filter and lowercased), not even any upper case matches.You can either define your own query parser and analyze the search terms for prefix query.
Else, define fields with accented and non accented versions, and have search work on both.
However, you still need to lower case your search terms.