【问题标题】:How to implement "starts with" search in SOLR?如何在 SOLR 中实现“开始于”搜索?
【发布时间】:2011-01-09 01:10:45
【问题描述】:

我有一个分类网站,例如,用户可能会搜索汽车。

您可能都知道,在搜索汽车时,它们的名称中有多个结尾。 例如让我们说 Bmw 330ci(结束 beeing 'ci'),但也有 Bmw 330i 或 Bmw 330di 等。

我怎样才能让 SOLR “理解”这一点,所以如果用户搜索 330 SOLR 将返回包含 330ci/330i/330di 等的结果。

此外,如果用户专门输入 Bmw 330ci,它不应该返回结果,那么它应该只返回 Bmw 330ci 而不是 Bmw 330i/di 等...

我是 SOLR 的新手,但我开始了解如何让它工作。不过在这方面需要一些指导!

你是怎么做到的?

谢谢

【问题讨论】:

    标签: java sql mysql database indexing


    【解决方案1】:

    您可能希望使用 WordDelimiterFilterFactory 分析字段,设置为在数字转换上进行拆分。这将允许 330 的查询匹配 330anything。

    我相信,默认情况下,当您在查询时也这样做时,它会从 330di -> "330 di" 创建一个短语查询,只有在索引中存在两个部分时才应该匹配。 详情请见http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters

    【讨论】:

      【解决方案2】:

      嗯,这取决于几个因素,但作为一般规则,在第一种情况下,您可以使用通配符,例如:
      q=330*

      在第二种情况下,您可以直接指向该字段并进行精确搜索: :330ci

      【讨论】:

        【解决方案3】:

        不知道SOLR,好像是做全文搜索的。

        但是,由于您事先了解自己的模型,因此可以使用常规 SQL 来执行此操作。


        在名称的数据库字段中,您可以将两者分成两列,而不是将基本名称与结尾混合,例如“rootName”和“suffixName”。

        然后您的 SQL 可以非常自然且极其高效地(与全文搜索相比)找到您需要的内容:搜索“rootName”,并选择“suffixName”(但仅在指定时)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-16
          • 2018-08-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多