思考Sphinx sql在一个字段的条件下查询

时间:2014-02-27 21:39:26

标签: ruby-on-rails sphinx thinking-sphinx

我有这些查询,但现在我正在尝试使用sphinx,我需要替换它们,但我找不到办法来做到这一点:

p1 = Product.where "category LIKE ?", "#{WORD}"
p2 = Product.where "category LIKE ?", "#{WORD}.%"
product_list = p1 + p2

我在“类别”字段中搜索名为“Product”的模型;我需要一种方法来替换sphinx中的“#”和“%”。我有一个基本的想法,如何做到这一点,但这不起作用:

Product.search conditions: {category: "('WORD' | 'WORD.*')"}

1 个答案:

答案 0 :(得分:0)

有几点需要注意。

  • 如果要匹配前缀,请确保将min_prefix_len设置为1或更大(更小,更准确,但搜索速度也会越慢,索引文件将越大)。此外,您需要将enable_star设置为true。这两个设置都属于config/thinking_sphinx.yml(例如in the docs)。
  • 单引号在Sphinx搜索中没有任何用途,并且会被忽略 - 但我不认为这是您尝试搜索的内容的问题。
  • 默认情况下,完全停止会被视为单词分隔符。您可以使用charset_table更改此内容 - 但这意味着所有字段中的所有句号都将被视为单词的一部分(例如,在句子末尾),因此我不建议它。

但是,如果忽略完全停止,则类别字段中的每个单词都会单独编制索引,因此无需任何额外设置,这应该有效:

Product.search conditions: {category: WORD}