1

我正在我的网站上创建分类广告的搜索功能。以下是我需要满足的一些标准:

  • 搜索“bmw 520”时,仅匹配这两个单词完全按照此顺序出现的位置。仅与“bmw”或仅“520”不匹配。

  • 搜索“bmw 330ci”时,将返回上述结果,但是,有和没有 ci 扩展名。众所周知,汽车中有许多扩展名(i、ci、si、fi 等)。

  • 我希望“减号”“排除”所有包含符号后单词的返回值,例如:“bmw -330”将返回所有“bmw”结果而不返回“330”结果。(用 NOT 代替减号也可以)

  • 所有像“é”这样的特殊字符重音都被转换为它们的简单值,在本例中为“e”。

  • 在搜索字符串中完全忽略的单词列表。

我需要Sphinx还是应该把它写在一个php文件中?

你建议我怎么做?

谢谢

4

2 回答 2

4

我认为 Sphinx 非常适合您想要做的事情,但有些事情不会自动发生......

  • 要精确匹配两个单词,您需要使用短语匹配模式,或者在使用扩展匹配模式时将单词分组在双引号中。

  • 这是一个棘手的问题 - 除非您指定特定的例外情况,否则我认为您不能将 330ci 索引为“330 ci”和“330ci”。

  • 只要您使用布尔或扩展匹配模式,减号就可以按照您的意愿工作。

  • “特殊”字符可以转换为标准 ASCII,但默认情况下不会发生这种情况。您需要设置您的 charset_table 值。这篇博文针对的是 Thinking Sphinx(Sphinx 的 Ruby 插件),但设置值只是直接传递给 Sphinx。

  • 如果您在查询中至少有一个其他单词,则只能在每个查询的基础上忽略特定单词(即:“-foo”对于 Sphinx 将失败,但“foo -bar”很好)。值得注意的是,您可以选择不索引特定单词

于 2009-12-19T08:07:26.390 回答
0

我认为 Sphinx 符合您的所有标准。

于 2009-12-13T12:08:09.347 回答