2011-10-04 143 views
1

我是SOLR新手。我有个问题。我把数据放到SOLR通过XML,数据在德国,例如:Solr非英文索引和搜索

<?xml version="1.0" encoding="utf-8" ?> 
<add> 
<doc> 
    <field name="id">1</field> 
    <field name="name">Größen helfen, ihr Potenzial voll zu entfalten. Sicherheit und Zuverlässigkeit, Innovation und Integration sowie</field> 
</doc> 
</add> 

该文件保存成功,当我从管理面板搜索与查询“的名字:*”返回,但是当我试图用搜索这个查询“名称:*uverlässigkeit*”它不返回。 我认为这是德语的问题,但我不知道如何解决这个问题。任何人都可以帮助我理解什么是错的。

回答

1

您无法执行以通配符开始的搜索 - 只有后缀通配符才允许在搜索查询中(因为否则它必须扫描与文档关联的所有术语)。如果您需要对前缀执行搜索,请对逆转项进行索引(但请注意,如果您使用字段而不考虑搜索内容,则可能会丢弃其他功能),并使用后缀通配符。

另外请注意,您的应用程序容器(即Jetty,Tomcat等)必须能够感知UTF-8(对于Tomcat,您必须对此进行特别配置),以便使用UTF-8字符串进行搜索正常。

+0

谢谢。我在server.xml(Tomcat)中添加了URIEncoding =“UTF-8”,现在搜索工作正常。 – vladimir

0

或者,它也可能是一个好主意,使用下面的过滤器在查询/指数分析:

<filter class="solr.ASCIIFoldingFilterFactory"/> 

这将取代德国变音与他们的标准ASCII亲戚,提高了匹配。

0

您使用了什么请求处理程序?
标准请求处理程序不支持引导通配符查询。

so name:uverlässigkeit将无法​​正常工作。

如果您想使用领先的通配符查询,您需要检查允许引用通配符的Extended Dismax解析器。 但是,通配符总是会影响性能。

与外部字符的匹配与solr一起工作良好。但是,如果使用ASCII Folding或ISO Latin Filter,则需要与索引和查询时间的分析保持一致。

另外,正如fiskfisk提到的,你需要在Tomcat中添加编码,如果使用它的web容器。

+0

对不起,但我不明白你的意思是“你使用的是什么请求处理程序”,我默认情况下全部使用。你能给我一个链接,我可以阅读这个。 – vladimir

+0

您使用qt param的请求处理程序不同。如果默认它不支持主导通配符。您需要使用deftype作为edismax来检查Extended Dismax查询解析器。 – Jayendra