Ruby on rails 在字段的条件中思考类似Sphinx sql的查询

Ruby on rails 在字段的条件中思考类似Sphinx sql的查询,ruby-on-rails,sphinx,thinking-sphinx,Ruby On Rails,Sphinx,Thinking Sphinx,我曾经有过这些查询,但现在我正在尝试使用sphinx,我需要替换它们,但我找不到一种方法: p1 = Product.where "category LIKE ?", "#{WORD}" p2 = Product.where "category LIKE ?", "#{WORD}.%" product_list = p1 + p2 我在“类别”字段中搜索名为“产品”的模型;我需要一种方法来替换斯芬克斯中的“#”和“%”。我对如何做到这一点有一个基本的想法,但这不起作用: Product.sea

我曾经有过这些查询,但现在我正在尝试使用sphinx,我需要替换它们,但我找不到一种方法:

p1 = Product.where "category LIKE ?", "#{WORD}"
p2 = Product.where "category LIKE ?", "#{WORD}.%"
product_list = p1 + p2
我在“类别”字段中搜索名为“产品”的模型;我需要一种方法来替换斯芬克斯中的“#”和“%”。我对如何做到这一点有一个基本的想法,但这不起作用:

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

有几件事需要注意

  • 如果要匹配前缀,请确保将
    min\u prefix\u len
    设置为1或更大(越小,越准确,但搜索速度越慢,索引文件越大)。此外,还需要将
    enable_star
    设置为true。这两种设置都属于
    config/thinking\u sphinx.yml
    (这里有一些示例)
  • 单引号在Sphinx搜索中没有任何用途,将被忽略-但我认为这不是您试图搜索的问题
  • 但是,默认情况下,句号被视为单词分隔符。你可以用-来改变这一点,但这意味着所有字段中的所有句号都将被视为单词的一部分(比如,在句子末尾),所以我不推荐使用它
但是,如果忽略句号,则类别字段中的每个单词都会单独索引,因此在没有任何额外设置的情况下,这应该可以工作:

Product.search conditions: {category: WORD}

代表什么?知道%在LIKE中是通配符,但不是#的意思。@barryhunter它表示字符串的开头,我在sphinx中也找到了它,带有
^WORD$
以精确匹配我更改了文件thinking_sphinx.yml,我还更改了charset_表,因为WORD有点,它被视为@pat提到的分隔符,搜索正在进行:
Product.search条件:{category:'WORD | WORD.*}