我正在使用Thinking Sphinx进行酒店搜索。我有一个名为“曼哈顿俱乐部”的项目。当我搜索“曼哈顿俱乐部”时,我没有得到任何结果。这是因为默认值:all选项表示必须匹配所有单词。
然后我使用:any选项(任何单词匹配将计为匹配)。然而,这导致了很多结果,顶级酒店在描述中有很多“THE”。
我认为提高相关性的唯一方法是删除搜索字符串中的所有停用词。我想知道Sphinx(或Ruby)是否有删除停用词的功能?
答案 0 :(得分:3)
我不知道你在思考狮身人面像时会怎么做,但是,Sphinx确实有停用词
http://sphinxsearch.com/docs/current.html#conf-stopwords
它位于sphinx.conf文件中的索引定义中。 indexer具有帮助您构建常用单词列表的工具 - 帮助创建初始化的停用词文件。
答案 1 :(得分:2)
你可以在config / sphinx.yml中设置stopwords文件路径 - 它的组织方式类似于config / database.yml(环境):
development:
stopwords: "/path/to/stopwords.txt"
对于停用词文件的确切内容,Barry的答案有相关的链接。
答案 2 :(得分:1)
要从Sphinx索引中删除高频词,您需要在索引定义中使用stopwords指令:
source my_source
{
...
}
index my_index
{
source = my_source
path = /path/to/my/index
...
stopwords = /path/to/stopwords/file
}
其中,停用词文件只是您希望从Sphinx索引中删除的每个单词的单词列表。索引器将忽略这些单词,不会将它们添加到索引中。
如果启用了索引配置中的形态选项,则另一种改进相关性检查的方法。您可能还希望在每个查询的基础上使用排名。
参考文献:
预先生成的停用词文件:http://astellar.com/2011/12/stopwords-for-sphinx-search/ 形态学:http://sphinxsearch.com/docs/current.html#conf-morphology