我正在我的网站上创建我的分类广告的搜索功能。 以下是我需要满足的一些标准:
当搜索'bmw 520'时,仅匹配这两个单词恰好以此顺序进入的匹配。不仅仅是'bmw'或仅仅'520'匹配。
当搜索'bmw 330ci'时,会返回上面的结果,但是,WITH WITH WITHOUT ci扩展名。你们都知道(i,ci,si,fi等)汽车中有一些扩展。
我希望'减号''排除'包含符号后面的单词的所有回复,例如:'bmw -330'将返回所有'bmw'结果而不包含'330'结果。 (一个NOT而不是减号也可以)
所有特殊字符重音如“é”都会转换为简单值,在本例中为“e”。
在搜索字符串中完全忽略的单词列表。
我需要Sphinx还是应该在php文件中写这个?
你建议我做什么?
由于
答案 0 :(得分:4)
我认为Sphinx非常适合你想做的事,但有些事情不会自动发生......
要准确匹配两个单词,您需要使用短语匹配模式,或者在使用扩展匹配模式时将单词分组为双引号。
这是一个棘手的问题 - 除非你指定特定的例外,我认为你不能将330ci索引为'330 ci'和'330ci'。
只要你使用布尔或扩展匹配模式,那么减号就可以按你的意愿工作。
'特殊'字符可以转换为标准ASCII,但默认情况下不会发生这种情况。您需要设置your charset_table value。这篇博客文章的目标是Thinking Sphinx(Sphinx的Ruby插件),但设置值直接传递给Sphinx。
如果您在查询中至少有一个其他单词,那么您只能忽略每个查询的特定单词(即:“-foo”对于Sphinx会失败,但是“foo -bar”很好)。值得注意的是,您可以选择to not index specific words。
答案 1 :(得分:0)
我认为Sphinx符合您的所有标准。