任何处理像斯芬克斯这样的“the”这样的停止词的功能?

时间:2011-12-02 10:50:02

标签: ruby-on-rails ruby full-text-search sphinx thinking-sphinx

我正在使用Thinking Sphinx进行酒店搜索。我有一个名为“曼哈顿俱乐部”的项目。当我搜索“曼哈顿俱乐部”时,我没有得到任何结果。这是因为默认值:all选项表示必须匹配所有单词。

然后我使用:any选项(任何单词匹配将计为匹配)。然而,这导致了很多结果,顶级酒店在描述中有很多“THE”。

我认为提高相关性的唯一方法是删除搜索字符串中的所有停用词。我想知道Sphinx(或Ruby)是否有删除停用词的功能?

3 个答案:

答案 0 :(得分:3)

我不知道你在思考狮身人面像时会怎么做,但是,Sphinx确实有停用词

http://sphinxsearch.com/docs/current.html#conf-stopwords

它位于sphinx.conf文件中的索引定义中。 indexer具有帮助您构建常用单词列表的工具 - 帮助创建初始化的停用词文件。

http://sphinxsearch.com/docs/current.html#ref-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