2012-01-17 148 views
5

我正在使用Solr,我想知道是否可以在查询中使用LIKE子句。例如,我想知道所有标题中带有“纽约”的组织。在SQL中,这将被写为像名称LIKE'纽约%'。Solr使用LIKE子句查询

我的问题 - 你如何在Solr中编写一个LIKE查询?

我正在使用SolrNet库,如果这有所作为。

+0

你可以检查http://stackoverflow.com/questions/3088401/substring-matches-within-solr – naresh 2012-01-18 09:37:40

回答

6

您只需搜索“纽约”,但首先您需要正确配置您的现场分析仪。例如,您可能希望从default Solr schema中定义的字段类型开始,如text_general。该字段类型将在空格和其他常用单词分隔符上标记化,然后应用停用词的过滤器,然后小写这些术语以使搜索不区分大小写。

有关analyzers in the Solr wiki的更多信息:

+0

我有复制粘贴text_general从默认collection1 schema.xml到我的项目,但搜索没有奏效。我正在尝试在字符串中搜索“热门”“在迪拜热吗?” – 2013-11-27 05:23:13

+0

如果我在Solr管理中分析它,它在那里工作,但如果我在管理>搜索它没有搜索 – 2013-11-27 05:25:17

6

如果您使用的是solr 3.1或更新版本,请查看支持通配符查询的Extended DisMax Query Parser。您可以在请求处理程序配置中使用<str name="defType">edismax</str>来启用它。

然后,您可以使用像title:New York*这样的查询,其行为与使用like子句的查询具有相同的行为。我的答案和接受的答案之间的主要区别是,您甚至可以使用通配符搜索单词的片段。例如New Yorkers在这种情况下会匹配。 不幸的是,即使您使用的是LowerCaseFilterFactory,也可能会遇到区分大小写的查询问题。看看here了解更多。由于SOLR-2438问题已得到解决,因此大多数问题将在solr 3.6版本中解决。