如何在SOLR中实现“以”开头搜索?

时间:2010-01-25 10:24:49

标签: java sql mysql database indexing

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

在搜索汽车时,您可能知道的名字中有许多结尾。 比如说Bmw 330ci(结束了'ci'),但也有Bmw 330i,或者Bmw 330di等等。

如何让SOLR“理解”这个,所以如果用户搜索330 SOLR将返回包含330ci / 330i / 330di等的结果。

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

我是SOLR的新手,但我开始明白如何让它发挥作用。虽然需要一点指导!

你会怎么做?

由于

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

我相信,默认情况下,当您在查询时也执行此操作时,它会从330di创建一个词组查询 - > “330 di”,只有在索引中存在两个部分时才匹配。 有关详细信息,请参阅http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters

答案 2 :(得分:0)

我不知道SOLR,它似乎是用于全文搜索。

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


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

然后你的SQL非常自然,非常有效(与全文搜索相比),找到你需要的东西:搜索“rootName”,并选择“suffixName”(但仅在指定时)。 / p>

答案 3 :(得分:0)