我有一个分类广告网站,用户可以搜索汽车。
当搜索一辆汽车时,它们的名字中有许多结尾,你们可能都知道。例如宝马330ci (结尾为“ci”),但也有宝马330i,或宝马330di等。
我如何才能让SOLR“理解”这一点,这样如果用户搜索330Solr将返回包含330ci/330i/330di等的结果。
此外,它不应该返回结果,如果用户专门输入宝马330ci,那么它应该只返回宝马330ci,而不是宝马330i/di等。
我是SOLR的新手,但我开始了解如何让它工作。不过,在这个问题上需要一点指导!
你会怎么做呢?
谢谢
发布于 2010-01-25 18:48:21
您可能希望使用WordDelimiterFilterFactory分析字段,并将其设置为对数值转换进行拆分。这将允许330的查询匹配330任何东西。
我相信,默认情况下,当您在查询时执行此操作时,它将从330di ->“330di”创建一个短语查询,只有在索引中同时存在这两个部分时才会匹配。有关更多详细信息,请参阅http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters。
发布于 2010-01-25 18:34:27
嗯,这取决于几个因素,但作为一般规则,在第一种情况下,您可以使用通配符,例如:
q=330*
在第二种情况下,您可以直接指向字段并执行精确搜索::330ci
发布于 2010-01-25 18:31:45
我不知道SOLR,它似乎是用于全文搜索的。
但是,因为您预先了解模型,所以可以使用常规SQL来完成此操作。
在name的数据库字段中,您可以将两个名称拆分为两列,如"rootName“和"suffixName”,而不是将基本名称与结尾混合在一起。
然后,您的SQL可以非常自然地、极其高效地(与全文搜索相比)找到所需的内容:搜索"rootName",并选择"suffixName“(但仅在指定的情况下)。
https://stackoverflow.com/questions/2131576
复制相似问题