我有一个分类广告网站,用户可能会搜索汽车。
在搜索汽车时,您可能知道的名字中有许多结尾。 比如说Bmw 330ci(结束了'ci'),但也有Bmw 330i,或者Bmw 330di等等。
如何让SOLR“理解”这个,所以如果用户搜索330 SOLR将返回包含330ci / 330i / 330di等的结果。
此外,如果用户专门输入Bmw 330ci,它不应该返回结果,那么它应该只返回Bmw 330ci而不是Bmw 330i / di等......
我是SOLR的新手,但我开始明白如何让它发挥作用。虽然需要一点指导!
你会怎么做?
由于
答案 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)