【问题标题】:Solr Query with LIKE Clause带有 LIKE 子句的 Solr 查询
【发布时间】:2012-02-12 17:20:19
【问题描述】:

我正在使用 Solr,我想知道查询中是否可以包含 LIKE 子句。例如,我想知道所有标题中带有“纽约”的组织。在 SQL 中,这会写成 Name LIKE 'New York%'。

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

我正在使用 SolrNet 库,如果这有什么不同的话。

【问题讨论】:

标签: solr lucene solrnet edismax


【解决方案1】:

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

更多关于analyzers in the Solr wiki的信息。

【讨论】:

  • 我已将默认 collection1 schema.xml 中的 text_general 复制粘贴到我的项目中,但搜索不起作用。我正在尝试在字符串“迪拜热吗?”中搜索“热”
  • 如果我在 Solr admin 中分析它,它可以在那里工作,但如果我在 Admin > Query 中搜索它没有
【解决方案2】:

如果您使用的是 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 版本中得到解决。

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多