【发布时间】:2012-02-12 17:20:19
【问题描述】:
我正在使用 Solr,我想知道查询中是否可以包含 LIKE 子句。例如,我想知道所有标题中带有“纽约”的组织。在 SQL 中,这会写成 Name LIKE 'New York%'。
我的问题 - 你如何在 Solr 中编写 LIKE 查询?
我正在使用 SolrNet 库,如果这有什么不同的话。
【问题讨论】:
标签: solr lucene solrnet edismax
我正在使用 Solr,我想知道查询中是否可以包含 LIKE 子句。例如,我想知道所有标题中带有“纽约”的组织。在 SQL 中,这会写成 Name LIKE 'New York%'。
我的问题 - 你如何在 Solr 中编写 LIKE 查询?
我正在使用 SolrNet 库,如果这有什么不同的话。
【问题讨论】:
标签: solr lucene solrnet edismax
您只需搜索“纽约”,但首先您需要正确配置字段的分析器。例如,您可能希望从text_general 之类的字段类型开始,如default Solr schema 中定义的那样。此字段类型将对空格和其他常用单词分隔符进行标记,然后应用停用词过滤器,然后将术语小写以使搜索不区分大小写。
更多关于analyzers in the Solr wiki的信息。
【讨论】:
如果您使用的是 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 版本中得到解决。
【讨论】: